Push не изменяет список как аргумент функции
Я новичок в общепринятом языке, поэтому надеюсь, что кто-нибудь прояснит мне это:
скажем, у нас есть список и мы хотим добавить элемент сpush
чтобы изменить его:
CL-USER> (defparameter xx '(1 2 3))
XX
CL-USER> xx
(1 2 3)
CL-USER> (push 100 xx)
(100 1 2 3)
CL-USER> xx
(100 1 2 3)
как и ожидалось. Но когда я пытаюсь сделать то же самое с функцией, она не изменяет список:
CL-USER> (defun push-200 (my-list)
(push 200 my-list))
PUSH-200
CL-USER> (push-200 xx)
(200 100 1 2 3)
CL-USER> xx
(100 1 2 3)
поэтому я попытался сравнить аргумент и мой список следующим образом:
CL-USER> (defun push-200 (my-list)
(format t "~a" (eq my-list xx))
(push 200 my-list))
WARNING: redefining COMMON-LISP-USER::PUSH-200 in DEFUN
PUSH-200
CL-USER> (push-200 xx)
T
(200 100 1 2 3)
CL-USER> xx
(100 1 2 3)
он говорит, что объекты идентичны. Вопрос в том, что я здесь упустил.