下面的代碼有z
作爲一個局部變量,但它的行爲就好像它是一個全球性的:Common Lisp中的屬性列表是指全局狀態嗎?
(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
爲什麼會出現這種情況?這種行爲是屬性列表特有的嗎?
[數據意外的持久性(可能的重複http://stackoverflow.com/questions/18790192/unexpected-persistence-of-data) – 2015-10-23 20:06:50