有人可以向我解释这个非常简单的代码片段中发生了什么吗?
(defun test-a ()
(let ((x '(nil)))
(setcar x (cons 1 (car x)))
x))
Run Code Online (Sandbox Code Playgroud)
在(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)))))
Run Code Online (Sandbox Code Playgroud)
(test-b)总是回来((1)).为什么不test-a和test-b等同?