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