2010-03-06 4 views
4

J'essaie d'utiliser un parenscript dans GNU Common Lisp pour compiler un fichier Lisp dans un fichier javascript.CLisp: "use-package" résoudre les conflits de façon non-interactive

Je trouve que l'utilisation de la macro de symbole PS "@" ne fonctionne pas si j'essaie d'utiliser son préfixe ("ps: @"). Cependant, si j'utilise REPL et exécute (use-package: ps) avant d'essayer de compiler le fichier lisp, tout fonctionne comme prévu (et je n'ai pas besoin d'utiliser les préfixes).

Le problème est que le paquet PS contient des symboles heurtant, par exemple:

*** - (USE-PACKAGE (#<PACKAGE PARENSCRIPT>) #<PACKAGE COMMON-LISP-USER>): 2 name conflicts remain 
    Which symbol with name "CHAIN" should be accessible in #<PACKAGE COMMON-LISP-USER>? 
    The following restarts are available: 
PARENSCRIPT :R1  #<PACKAGE PARENSCRIPT> 
COMMON-LISP-USER :R2 #<PACKAGE COMMON-LISP-USER> 
ABORT   :R3  Abort main loop 

je peux résoudre ce de manière interactive en choisissant: r1, mais lorsque je tente de mettre cette étape dans mon script il juste bails (depuis c'est non-interactif, il ne me donne pas le choix de ce que le redémarrage à utiliser)

J'aimerais dire (dans mon script) "il suffit d'utiliser la version PS de tous les symboles qui s'affrontent", mais je peux ' t comprendre comment le faire.

Il serait également bon si je pouvais dire (comme on pourrait le faire en python), "de la chaîne d'importation PS, @, (etc)" - en spécifiant chaque symbole que je veux importer manuellement.

+0

Pouvez-vous afficher vos définitions de paquet resp. "déclarations d'importation"? – Svante

+0

Désolé, je ne comprends pas. Que veux-tu que je montre? – gfxmonk

Répondre

8

Au lieu de travailler dans le package Common Lisp-USER, faire votre propre avec DEFPACKAGE:

(defpackage #:my-awesome-program 
    (:use #:cl #:parenscript)) 

(in-package #:my-awesome-program) 

; your code here 

Common Lisp-utilisateur peut inclure toutes sortes de symboles spécifiques à la mise en œuvre.

Vous pouvez également utiliser SHADOWING-IMPORT pour obtenir des symboles individuels, en remplaçant ce qui est déjà visible dans le package, par ex.

(shadowing-import 'ps:*) 
+0

J'ai mis cela en haut de mon fichier appelé "compiler.lisp", en insérant "my-awesome-program" pour "compiler": [1]> (charger "compiler.lisp") >> RENAME -PACKAGE ("SYSTEM"): # est verrouillé si je continue, en ignorant cette erreur, j'obtiens: USAGE: Il n'y a pas de paquet avec le nom "COMPILER". Est-ce que (charger "compiler.lisp") la mauvaise fonction? Devrais-je l'exiger ou autre chose? – gfxmonk

+0

La chose d'ombrage-importation a fonctionné, merci! Je ne suis pas sûr de ce que j'ai fait pour que le paquet ne marche pas, je vais devoir le comprendre un peu plus tard ... – gfxmonk

+0

Je devrais voir votre fichier. Le message d'erreur n'a pas de sens seulement à partir de votre description de celui-ci. – Xach

Questions connexes