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?