LISP - Pakete
Im Allgemeinen handelt es sich bei einem Paket um eine Möglichkeit, einen Satz von Namen von einem anderen zu trennen. Die in einem Paket deklarierten Symbole stehen nicht in Konflikt mit denselben in einem anderen Paket deklarierten Symbolen. Auf diese Weise reduzieren Pakete die Namenskonflikte zwischen unabhängigen Codemodulen.
Der LISP-Reader führt eine Tabelle aller gefundenen Symbole. Wenn eine neue Zeichenfolge gefunden wird, wird ein neues Symbol erstellt und in der Symboltabelle gespeichert. Diese Tabelle wird als Paket bezeichnet.
Das aktuelle Paket wird von der speziellen Variablen * package * referenziert.
Es gibt zwei vordefinierte Pakete in LISP -
common-lisp - Es enthält Symbole für alle definierten Funktionen und Variablen.
common-lisp-user- Es verwendet das Common-Lisp-Paket und alle anderen Pakete mit Bearbeitungs- und Debugging-Tools. es heißt kurz cl-user
Paketfunktionen in LISP
Die folgende Tabelle enthält die am häufigsten verwendeten Funktionen zum Erstellen, Verwenden und Bearbeiten von Paketen.
Sr.Nr. | Funktion und Beschreibung |
---|---|
1 | make-package Paketname & Schlüssel: Spitznamen: verwenden Es wird ein neues Paket mit dem angegebenen Paketnamen erstellt und zurückgegeben. |
2 | in-package Paketname & Schlüssel: Spitznamen: verwenden Macht das Paket aktuell. |
3 | in-package Name Dieses Makro bewirkt, dass * package * auf den Paketnamen gesetzt wird, der ein Symbol oder eine Zeichenfolge sein muss. |
4 |
find-package Name Es sucht nach einem Paket. Das Paket mit diesem Namen oder Spitznamen wird zurückgegeben. Wenn kein solches Paket vorhanden ist, gibt find-package nil zurück. |
5 |
rename-package Paket neuer Name & optionale neue Spitznamen es benennt ein Paket um. |
6 |
list-all-packages Diese Funktion gibt eine Liste aller Pakete zurück, die derzeit im Lisp-System vorhanden sind. |
7 |
delete-package Paket Es löscht ein Paket. |
Erstellen eines LISP-Pakets
Das defpackageDie Funktion wird zum Erstellen eines benutzerdefinierten Pakets verwendet. Es hat die folgende Syntax -
(defpackage :package-name
(:use :common-lisp ...)
(:export :symbol1 :symbol2 ...)
)
Wo,
Paketname ist der Name des Pakets.
Das Schlüsselwort: use gibt die Pakete an, die dieses Paket benötigt, dh Pakete, die Funktionen definieren, die vom Code in diesem Paket verwendet werden.
Das Schlüsselwort: export gibt die Symbole an, die in diesem Paket extern sind.
Das make-packageDie Funktion wird auch zum Erstellen eines Pakets verwendet. Die Syntax für diese Funktion lautet -
make-package package-name &key :nicknames :use
Die Argumente und Schlüsselwörter haben dieselbe Bedeutung wie zuvor.
Verwenden eines Pakets
Sobald Sie ein Paket erstellt haben, können Sie den Code in diesem Paket verwenden, indem Sie es zum aktuellen Paket machen. Dasin-package Makro macht ein Paket in der Umgebung aktuell.
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
(write-line "Hello! This is Tom's Tutorials Point")
)
(hello)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Point")
)
(hello)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Point")
)
(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
Paket löschen
Das delete-packageMit Makro können Sie ein Paket löschen. Das folgende Beispiel zeigt dies -
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
(write-line "Hello! This is Tom's Tutorials Point")
)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Point")
)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Point")
)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
*** - EVAL: variable TOM has no value