Can someone explain the following behavior? Specifically, why does the function return a different list every time? Why isn’t some-list initialized to '(0 0 0) every time the function is called?
(defun foo ()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
Output:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Thanks!
EDIT:
Also, what is the recommended way of implementing this function, assuming I want the function to output '(1 0 0) every time?
'(0 0 0)is a literal object, which is assumed to be a constant (albeit not protected from modification). So you’re effectively modifying the same object every time. To create different objects at each function call use(list 0 0 0).So unless you know, what you’re doing, you should always use literal lists (like
'(0 0 0)) only as constants.