LISP - Forfaits

En terme général de langages de programmation, un package est conçu pour fournir un moyen de séparer un ensemble de noms d'un autre. Les symboles déclarés dans un paquet n'entreront pas en conflit avec les mêmes symboles déclarés dans un autre. De cette façon, les packages réduisent les conflits de dénomination entre les modules de code indépendants.

Le lecteur LISP tient à jour un tableau de tous les symboles qu'il a trouvés. Lorsqu'il trouve une nouvelle séquence de caractères, il crée un nouveau symbole et le stocke dans la table des symboles. Cette table s'appelle un package.

Le package actuel est référencé par la variable spéciale * package *.

Il existe deux packages prédéfinis dans LISP -

  • common-lisp - il contient des symboles pour toutes les fonctions et variables définies.

  • common-lisp-user- il utilise le package common-lisp et tous les autres packages avec des outils d'édition et de débogage; ça s'appelle cl-user en bref

Fonctions de package dans LISP

Le tableau suivant fournit les fonctions les plus couramment utilisées pour créer, utiliser et manipuler des packages -

N ° Sr. Fonction et description
1

make-package nom-package & clé: surnoms: utilisation

Il crée et renvoie un nouveau package avec le nom de package spécifié.

2

in-package nom-package & clé: surnoms: utilisation

Rend le package courant.

3

in-package Nom

Cette macro entraîne la définition de * package * sur le package nommé name, qui doit être un symbole ou une chaîne.

4

find-package Nom

Il recherche un package. Le package avec ce nom ou surnom est retourné; si aucun package de ce type n'existe, find-package renvoie nil.

5

rename-package paquet nouveau-nom et nouveaux-surnoms facultatifs

il renomme un package.

6

list-all-packages

Cette fonction renvoie une liste de tous les packages qui existent actuellement dans le système Lisp.

sept

delete-package paquet

Il supprime un package.

Créer un package LISP

le defpackageLa fonction est utilisée pour créer un package défini par l'utilisateur. Il a la syntaxe suivante -

(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)

Où,

  • nom-package est le nom du package.

  • Le mot-clé: use spécifie les packages dont ce package a besoin, c'est-à-dire les packages qui définissent les fonctions utilisées par le code dans ce package.

  • Le mot-clé: export spécifie les symboles externes dans ce package.

le make-packageLa fonction est également utilisée pour créer un package. La syntaxe de cette fonction est -

make-package package-name &key :nicknames :use

Les arguments et mots-clés ont la même signification qu'avant.

Utiliser un package

Une fois que vous avez créé un package, vous pouvez utiliser le code de ce package, en en faisant le package actuel. lein-package macro rend un package courant dans l'environnement.

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

(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)

Lorsque vous exécutez le code, il renvoie le résultat suivant -

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point

Supprimer un package

le delete-packagemacro vous permet de supprimer un package. L'exemple suivant illustre ceci -

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

(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)

Lorsque vous exécutez le code, il renvoie le résultat suivant -

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