CLISP 之变量删除与重建的影响

1、不用defvar 与defparameter 创建的变量,不支持动态绑定。

(psetq x nil)

(defun print-x  nil (format t "x=~a~%" x))

test:

      (print-x); nil

      (let ((x 123)) (print-x));nil

2、在 第 1 步的基础上执行 (defvar x nil) 后,变量变为支持动态绑定.

    (defvar x nil)

     (print-x);nil

    (let ((x 123)) (print-x));123

3、删除变量x地定义后,print-x 中对 x 的引用变为 #:x.

    (unintern (find-symbol "X")); T

    (symbol-function 'print-x); #<FUNCTION PRINT-X NIL (DECLARE (IN-DEFUN PRINT-X)) (BLOCK PRINT-X (FORMAT T x=~a~% #:X))>

     (let ((x 123)) (print-x));NIL :因为动态绑定的 x  与#:x不为同一变量( package 不同)


综上:

  1、需要动态绑定的变量用defvar 或 defparameter 创建.

  2、unintern 的变量相关的函数需要重建.

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值