有人可以向我解释一下这个非常简单的代码段中的情况吗?
(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等同?
MMTTMM
手掌心