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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow