Push ändert nicht die Liste, die ein Funktionsargument ist

Ich bin neu bei Common Lisp, also hoffe jemand würde mir das erklären:

say wir haben eine Liste und möchten einen Artikel mit @ hinzufügpush um es zu ändern:

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)

wie erwartet. Aber wenn ich versuche, dasselbe mit der Funktion zu tun, ändert es keine Liste:

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)

Also habe ich versucht, Argument und meine Liste wie folgt zu vergleichen:

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)

it sagt, die Objekte sind identisch. Die Frage ist also: Was habe ich hier übersehen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage