【发布时间】:2013-05-16 06:40:52
【问题描述】:
有人可以向我解释一下这个非常简单的代码 sn-p 中发生了什么吗?
(defun test-a ()
(let ((x '(nil)))
(setcar x (cons 1 (car x)))
x))
第一次调用(test-a) 时,我得到了预期的结果:((1))。
但令我惊讶的是,再次调用它,我得到((1 1))、((1 1 1)) 等等。
为什么会这样?期望(test-a) 总是返回((1)) 我错了吗?
另请注意,重新评估test-a的定义后,返回结果会重置。
还要考虑这个功能按我的预期工作:
(defun test-b ()
(let ((x '(nil)))
(setq x (cons (cons 1 (car x))
(cdr x)))))
(test-b) 总是返回 ((1))。
为什么test-a 和test-b 不等价?
【问题讨论】: