Was ist der Unterschied zwischen '(a b c) und (list' a 'b' c)?

7

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?

Thura 13.09.2009, 09:08
quelle

2 Antworten

14

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).

    
Christian 13.09.2009, 09:30
quelle
8

Die Variablen * , ** und *** werden von der Sprache standard und sie sind sehr nützlich beim Testen von Dingen. Sie sind ein Merkmal der REPL und sollten daher in einem "echten Code" nicht verwendet werden und auch nicht sein.

    
Ramarren 13.09.2009 10:25
quelle

Tags und Links