2010-03-06 72 views
4

我試圖在GNU通用lisp中使用parenscript來將lisp文件編譯成一個javascript文件。CLisp:「use-package」非交互式地解決衝突

我發現使用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導入鏈,@,(etc)」 - 指定我想手動導入的每個符號也是可以的。

+0

你可以顯示你的軟件包定義。 「進口報表」? – Svante 2010-03-07 02:33:49

+0

對不起,我不明白。你想讓我展示什麼? – gfxmonk 2010-03-07 02:43:34

回答

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:*) 
+0

我已經把它放在我的文件頂部,名爲「compiler.lisp」,爲「編譯器」指定了「my-awesome-program」: [1]>(load「compiler.lisp」) >> RENAME -PACKAGE(「SYSTEM」):#被鎖定 如果我繼續,忽略這個錯誤,我得到:USE-PACKAGE:沒有名稱爲「COMPILER」的軟件包。 是(加載「compiler.lisp」)錯誤的函數?我應該要求還是其他? – gfxmonk 2010-03-07 06:33:51

+0

陰影導入工作,謝謝!我不知道我已經做了什麼來使這個軟件包無法正常工作,我將不得不在稍後的時間裏弄清楚這一點...... – gfxmonk 2010-03-07 07:59:47

+0

我得看看你的文件。錯誤信息僅僅從你的描述中是沒有意義的。 – Xach 2010-03-07 11:32:02