Veuillez considérer ce code LISP commun ... em> p> ; in: + 2
; (NEW::+ 2 2)
;
; caught COMMON-LISP:STYLE-WARNING:
; undefined function: NEW::+
;
; compilation unit finished
; Undefined function:
; +
; caught 1 STYLE-WARNING condition
debugger invoked on a COMMON-LISP:UNDEFINED-FUNCTION in thread
#<THREAD "main thread" RUNNING {1000508083}>:
The function NEW::+ is undefined.
3 Réponses :
Vous pouvez spécifier des packages à partir desquels pour hériter des symboles dans cmucl p> sbcl p> La fonction code> la fonction code> indique que le package Il serait typique dans un fichier à utiliser puis revenez à l'espace de travail principal, le package défavackage code> avec
: Utilisez code> ou pouvez appeler
use-package code> à la même fin ; Je le fais habituellement dans
Defpackage Code>. Je ne savais pas que Cmluck s'est comporté différemment que SBCL à cet égard, mais j'inclus toujours
(: Utilisation: commun-lisp) code> dans mes packages. L'Hyperspec
de défavackage code> Documentation dit: si
: Utiliser code> n'est pas fourni, il est par défaut de la même valeur dépendante de la mise en œuvre en tant que
ici vous Peut voir une différence entre cmll et sbcl: : Utilisez code> argument sur
make-package code>.
neuf code> utilise
commun-lisp code> dans cmll, mais pas dans SBCL. Vous pouvez éviter de telles questions par explicitement
Utiliser code> packages: p>
: exporter code > Dans le formulaire CODE> DEFPACKAGE CODE> pour exporter des symboles, mais à partir du package Répétuel dans le nouveau code> Vous pouvez également définir des fonctions et exporter leurs symboles à utiliser dans d'autres packages: P>
commun-lisp-utilisateur CODE> et appelez
use-package code> pour accéder au nouveau Fonction: p>
Si ma mémoire est correcte (et ce n'est probablement pas), la raison pour laquelle SBCL a décalé qu'il était surprenant des personnes que l'utilisation de l'emballage : cl code> ne fonctionnait plus une fois que vous avez commencé à spécifier d'autres packages avec < Code>: Utilisez-le-package code>.
Il est indéfini dans la norme CL quels paquets à utiliser em> quand il n'y a pas de CLHS: Defquackage : P>
Les arguments à: Utilisez Définir les packages que le package nommé par le nom du paquet héritera de. Si: l'utilisation n'est pas fournie, il est par défaut à la même valeur forte> dépendante de la mise en œuvre forte> comme: Utilisez l'argument pour faire un package. P>
blockQuote>
SBCL a choisi de ne pas utiliser em> tout package. P>
Traditionnellement, une autre implémentation CL choisit généralement de utiliser em> le package CL et des paquets d'extension. L'intention était alors qu'un nouveau package est par défaut utile em> pour la programmation LISP comme le package Pour le code portable, vous devez spécifier quels packages un paquet doit utiliser em>. Habituellement : Utilisez la clause CODE> dans Defparackage. P>
cl-utilisateur code>. P>.
défenseur code> et
make-package code> sont les opérateurs à regarder. P>
Ceci est un addendum aux autres réponses.
Une chose que j'ai faite dans le passé consiste à écrire une macro comme ceci: p> en utilisant alors p> définira un package "comme" utilisateur CL code> en ce sens qu'il utilise tous les mêmes packages, et cela fera cela d'une manière qui fonctionne à travers des implémentations. p> p>