common-lisp
Zitat
Suche…
Syntax
- (Zitatobjekt) -> Objekt
Bemerkungen
Es gibt einige Objekte (z. B. Stichwortsymbole), die nicht in Anführungszeichen gesetzt werden müssen, da sie sich selbst auswerten.
Einfaches Zitatbeispiel
Quote ist ein spezieller Operator , der die Bewertung seines Arguments verhindert. Es gibt sein Argument zurück, unbewertet.
CL-USER> (quote a)
A
CL-USER> (let ((a 3))
(quote a))
A
'ist ein Alias für den speziellen Operator QUOTE
Die Bezeichnung 'thing
ist gleich (quote thing)
.
Der Leser macht die Erweiterung:
> (read-from-string "'a")
(QUOTE A)
Anführungszeichen werden verwendet, um eine weitere Auswertung zu verhindern. Das zitierte Objekt wertet sich selbst aus.
> 'a
A
> (eval '+ 1 2)
3
Werden Objekte in Anführungszeichen destruktiv geändert, sind die Folgen undefiniert!
Vermeiden Sie destruktive Operationen an zitierten Objekten. Zitierte Objekte sind literale Objekte. Sie sind möglicherweise auf irgendeine Weise in den Code eingebettet. Wie dies funktioniert und die Auswirkungen von Modifikationen im Common-Lisp-Standard nicht festgelegt sind, kann jedoch unerwünschte Folgen haben, wie das Ändern gemeinsam genutzter Daten, der Versuch, schreibgeschützte Daten zu ändern, oder unerwünschte Nebeneffekte.
(delete 5 '(1 2 3 4 5))
Objekte zitieren und selbst auswerten
Beachten Sie, dass viele Datentypen nicht in Anführungszeichen gesetzt werden müssen, da sie sich selbst auswerten. QUOTE
ist besonders nützlich für Symbole und Listen, um eine Auswertung in Form von Lisp zu verhindern.
Beispiel für andere Datentypen, die nicht in Anführungszeichen gesetzt werden müssen, um die Auswertung zu verhindern: Zeichenfolgen, Zahlen, Zeichen, CLOS-Objekte, ...
Hier ein Beispiel für Strings. Die Auswertungsergebnisse sind Zeichenfolgen, unabhängig davon, ob sie in der Quelle angegeben sind oder nicht.
> (let ((some-string-1 "this is a string")
(some-string-2 '"this is a string with a quote in the source")
(some-string-3 (quote "this is another string with a quote in the source")))
(list some-string-1 some-string-2 some-string-3))
("this is a string"
"this is a string with a quote in the source"
"this is another string with a quote in the source")
Die Quotierung der Objekte ist daher optional.