LISP - Pacchetti
In termini generali di linguaggi di programmazione, un pacchetto è progettato per fornire un modo per mantenere un insieme di nomi separato da un altro. I simboli dichiarati in un pacchetto non entreranno in conflitto con gli stessi simboli dichiarati in un altro. In questo modo i pacchetti riducono i conflitti di denominazione tra moduli di codice indipendenti.
Il lettore LISP mantiene una tabella di tutti i simboli che ha trovato. Quando trova una nuova sequenza di caratteri, crea un nuovo simbolo e lo memorizza nella tabella dei simboli. Questa tabella è chiamata pacchetto.
Il pacchetto corrente è indicato dalla variabile speciale * pacchetto *.
Ci sono due pacchetti predefiniti in LISP:
- common-lisp - contiene simboli per tutte le funzioni e variabili definite. 
- common-lisp-user- utilizza il pacchetto common-lisp e tutti gli altri pacchetti con strumenti di modifica e debug; si chiama in breve cl-user 
Funzioni del pacchetto in LISP
La tabella seguente fornisce le funzioni usate più comunemente per creare, usare e manipolare i pacchetti:
| Sr.No. | Funzione e descrizione | 
|---|---|
| 1 | make-package nome-pacchetto e chiave: soprannomi: usa Crea e restituisce un nuovo pacchetto con il nome del pacchetto specificato. | 
| 2 | in-package nome-pacchetto e chiave: soprannomi: usa Rende il pacchetto attuale. | 
| 3 | in-package nome Questa macro fa sì che * pacchetto * venga impostato sul pacchetto denominato nome, che deve essere un simbolo o una stringa. | 
| 4 | find-package nome Cerca un pacchetto. Viene restituito il pacchetto con quel nome o nickname; se non esiste un tale pacchetto, find-package restituisce nil. | 
| 5 | rename-package pacchetto nuovo-nome e nuovi-soprannomi opzionali rinomina un pacchetto. | 
| 6 | list-all-packages Questa funzione restituisce un elenco di tutti i pacchetti attualmente esistenti nel sistema Lisp. | 
| 7 | delete-package pacchetto Elimina un pacchetto. | 
Creazione di un pacchetto LISP
Il defpackageviene utilizzata per creare un pacchetto definito dall'utente. Ha la seguente sintassi:
(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)Dove,
- nome-pacchetto è il nome del pacchetto. 
- La parola chiave: use specifica i pacchetti di cui ha bisogno questo pacchetto, cioè i pacchetti che definiscono le funzioni usate dal codice in questo pacchetto. 
- La parola chiave: export specifica i simboli esterni in questo pacchetto. 
Il make-packageviene utilizzata anche per creare un pacchetto. La sintassi per questa funzione è:
make-package package-name &key :nicknames :useGli argomenti e le parole chiave hanno lo stesso significato di prima.
Utilizzo di un pacchetto
Dopo aver creato un pacchetto, è possibile utilizzare il codice in questo pacchetto, rendendolo il pacchetto corrente. Ilin-package macro rende un pacchetto corrente nell'ambiente.
Esempio
Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.
(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)Quando esegui il codice, restituisce il seguente risultato:
Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials PointEliminazione di un pacchetto
Il delete-packagemacro consente di eliminare un pacchetto. Il seguente esempio lo dimostra:
Esempio
Crea un nuovo file di codice sorgente denominato main.lisp e digita il codice seguente.
(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)Quando esegui il codice, restituisce il seguente risultato:
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