The code below has z
as a local variable, yet it behaves as if it is a global:
(defun foo (m)
(let ((z '(stuff nil)))
(push m (getf z 'stuff))
(print z)))
(foo 1)
(foo 2)
(foo 3)
I would expect the output to be
(STUFF (1))
(STUFF (2))
(STUFF (3))
T
but when running it with SBCL I see
(STUFF (1))
(STUFF (2 1))
(STUFF (3 2 1))
T
Why is this the case? Is this behaviour peculiar to property lists?