Приведенный ниже код имеет 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
Почему это так? Это поведение свойственно спискам свойств?