gfx*_*onk 4 packages common-lisp
我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
我可以通过选择:r1以交互方式解决这个问题,但是当我尝试将此步骤放入我的脚本时它只是保释(因为它是非交互式的,它不会让我选择重启使用什么)
我想说(在我的剧本中)"只使用所有冲突符号的PS版本",但我无法弄清楚如何这样做.
如果我可以说(例如在python中),"来自PS导入链,@,(等)"也是可以的 - 指定我想手动导入的每个符号.
不要使用COMMON-LISP-USER包,而是使用DEFPACKAGE创建自己的包:
(defpackage #:my-awesome-program
(:use #:cl #:parenscript))
(in-package #:my-awesome-program)
; your code here
Run Code Online (Sandbox Code Playgroud)
COMMON-LISP-USER可能包含各种特定于实现的符号.
您还可以使用SHADOWING-IMPORT获取单个符号,覆盖包中当前可能已显示的内容,例如
(shadowing-import 'ps:*)
Run Code Online (Sandbox Code Playgroud)