下面的代码z
是一个局部变量,但它的行为就好像它是一个全局变量:
(defun foo (m)
(let ((z '(stuff nil)))
(push m (getf z 'stuff))
(print z)))
(foo 1)
(foo 2)
(foo 3)
我希望输出是
(STUFF (1))
(STUFF (2))
(STUFF (3))
T
但是当使用 SBCL 运行它时,我看到了
(STUFF (1))
(STUFF (2 1))
(STUFF (3 2 1))
T
为什么会这样?这种行为是属性列表特有的吗?