(defmacro add-key-value (key value alist) `(push (cons ,key ,value) ,alist)) (defmacro add-key-value2 (key value alist) `(setf ,alist (acons ,key ,value ,alist))) (defparameter *a* nil) ; => NIL (add-key-value "foo" "bar" *a*) ; => (("foo" . "bar")) (add-key-value "baz" "qux" *a*) ; => (("baz" . "qux") ("foo" . "bar")) (defparameter *b* nil) ; => NIL (add-key-value2 "foo" "bar" *b*) ; => (("foo" . "bar")) (add-key-value2 "baz" "qux" *b*) ; => (("baz" . "qux") ("foo" . "bar"))