Ich lese "auf Lisp" und stieß auf diesen Code (ich habe es ein wenig vereinfacht).
%Vor% Was genau bedeutet *
? Ist es der vorherige Funktionsaufruf? Ist es geeignet, in realem Code zu verwenden?
Warum ändert (nconc * '(D E))
den Rückgabewert der ersten foo
Funktion?
Ich dachte immer (list 'a 'b 'c)
und '(a b c)
sind gleich? Was ist der Unterschied?
Der Aufruf von LIST erstellt bei jeder Auswertung eine neue Liste. Das Listenliteral kann nach der Kompilierung in einem schreibgeschützten Speichersegment platziert werden. Eine destruktive Aktualisierung der Listen mit NCONC ist dann problematisch, möglicherweise mit undefinierten Konsequenzen (Segmentierungsfehler, Änderung des Literals für zukünftige Referenzen oder gar nichts).
Tags und Links lisp common-lisp sbcl