我正在尝试在GNU common lisp中使用parenscript将lisp文件编译为javascript文件。
我发现如果我尝试使用它的前缀(“ps:@”),使用PS符号宏“@”不起作用。但是,如果我在尝试编译lisp文件之前使用REPL并运行(use-package:ps),一切都按预期工作(我不必使用前缀)。
问题是PS包中包含冲突符号,例如:
*** - (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
我可以通过选择:r1以交互方式解决这个问题,但是当我尝试将此步骤放在我的脚本中时,它只是保释(因为它是非交互式的,它不能让我选择重启使用什么)
我想说(在我的剧本中)“只使用所有冲突符号的PS版本”,但我无法弄清楚如何这样做。
如果我可以说(可能是在python中),“来自PS导入链,@,(等)”也是可以的 - 指定我想手动导入的每个符号。
答案 0 :(得分:8)
不要使用COMMON-LISP-USER包,而是使用DEFPACKAGE创建自己的包:
(defpackage #:my-awesome-program
(:use #:cl #:parenscript))
(in-package #:my-awesome-program)
; your code here
COMMON-LISP-USER可能包含各种特定于实现的符号。
您还可以使用SHADOWING-IMPORT获取单个符号,覆盖包中当前可见的内容,例如
(shadowing-import 'ps:*)