LISP - Symbole

In LISP ist ein Symbol ein Name, der Datenobjekte darstellt, und interessanterweise auch ein Datenobjekt.

Das Besondere an Symbolen ist, dass sie eine Komponente namens haben property list, oder plist.

Immobilienlisten

Mit LISP können Sie Symbolen Eigenschaften zuweisen. Lassen Sie uns zum Beispiel ein 'Personen'-Objekt haben. Wir möchten, dass dieses 'Personen'-Objekt Eigenschaften wie Name, Geschlecht, Größe, Gewicht, Adresse, Beruf usw. hat. Eine Eigenschaft ist wie ein Attributname.

Eine Eigenschaftsliste wird als Liste mit einer geraden Anzahl (möglicherweise Null) von Elementen implementiert. Jedes Elementpaar in der Liste bildet einen Eintrag. Der erste Punkt ist derindicator, und der zweite ist der value.

Wenn ein Symbol erstellt wird, ist seine Eigenschaftsliste zunächst leer. Eigenschaften werden mithilfe von erstelltget innerhalb eines setf bilden.

Mit den folgenden Anweisungen können wir beispielsweise einem Objekt mit dem Namen (Symbol) 'Buch' den Titel, den Autor und den Herausgeber der Eigenschaften sowie die entsprechenden Werte zuweisen.

Beispiel 1

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(write (setf (get 'books'title) '(Gone with the Wind)))
(terpri)
(write (setf (get 'books 'author) '(Margaret Michel)))
(terpri)
(write (setf (get 'books 'publisher) '(Warner Books)))

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

(GONE WITH THE WIND)
(MARGARET MICHEL)
(WARNER BOOKS)

Mit verschiedenen Funktionen der Eigenschaftsliste können Sie Eigenschaften zuweisen sowie die Eigenschaften eines Symbols abrufen, ersetzen oder entfernen.

Das getDie Funktion gibt die Eigenschaftsliste des Symbols für einen bestimmten Indikator zurück. Es hat die folgende Syntax -

get symbol indicator &optional default

Das getDie Funktion sucht nach der Eigenschaftsliste des angegebenen Symbols für den angegebenen Indikator. Wenn sie gefunden wird, gibt sie den entsprechenden Wert zurück. Andernfalls wird default zurückgegeben (oder nil, wenn kein Standardwert angegeben ist).

Beispiel 2

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(setf (get 'books 'title) '(Gone with the Wind))
(setf (get 'books 'author) '(Margaret Micheal))
(setf (get 'books 'publisher) '(Warner Books))

(write (get 'books 'title))
(terpri)
(write (get 'books 'author))
(terpri)
(write (get 'books 'publisher))

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

(GONE WITH THE WIND)
(MARGARET MICHEAL)
(WARNER BOOKS)

Das symbol-plist Mit dieser Funktion können Sie alle Eigenschaften eines Symbols anzeigen.

Beispiel 3

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)

Das remprop Funktion entfernt die angegebene Eigenschaft aus einem Symbol.

Beispiel 4

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))
(remprop 'annie 'age)
(terpri)
(write (symbol-plist 'annie))

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)