append
returns the new value, it does not modify its arguments.
You need to use setq
:
(setq temp (append temp (list 1)))
or push
(which adds to the beginning of the list, not the end!):
(push 1 temp)
You can also use nconc
for destructive appending, but you will still need setq
because you cannot destructively append to nil
:
(defparameter temp nil)
(append temp '(1))
;; returns (1) but `temp` is still empty
(nconc temp '(1))
;; also returns (1) but `temp` is still empty
(setq temp (append temp (list 2)))
;; now temp is (2)
(append temp '(1))
;; returns (2 1) but `temp` is still (2)
(nconc temp '(1))
;; returns (2 1) and `temp` is now (2 1)
please note that one should not use quoted lists (like '(1)
) when one plans to destructively append to them using nconc
, see Why does an elisp local variable keep its value in this case? for more information and links, especially Issue CONSTANT-MODIFICATION.