2010-03-06 5 views
4

나는 GNU 일반 Lisp에서 parenscript를 사용하여 lisp 파일을 javascript로 컴파일하려고합니다.CLisp : "사용 패키지"비 대화식으로 충돌 해결

접두사 ("ps : @")를 사용하려고하면 PS 기호 매크로 "@"를 사용하면 작동하지 않습니다. 그러나 lisp 파일을 컴파일하기 전에 REPL을 사용하여 (use-package : 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 

내가 선택하여이 문제를 대화 형으로 해결할 수 있습니다 :

문제는 PS 패키지는 예를 들어 충돌 기호가 포함되어 있다는 점이다 (R1)을,하지만 난 이후 (내 스크립트 그것은 단지 보석금이 단계를 넣어하려고 할 때 그것은 비대륙 적이기 때문에 어떤 재시작을 선택하지 않아도됩니다)

"모든 충돌 심볼의 PS 버전을 사용하십시오"라고 말하고 싶지만, 그렇게하는 법을 이해해야합니다.

"PS import chain, @, (etc)"에서 (수동으로 가져올 각 기호를 지정하여) 파이썬에서 말할 수도 있습니다.

+0

패키지 정의를 표시 할 수 있습니까? "import statements"? – Svante

+0

죄송합니다, 이해가 안됩니다. 나에게 보여주고 싶은게 뭐야? – gfxmonk

답변

8

대신 COMMON-LISP-USER 패키지 작업, DEFPACKAGE와 함께 자신합니다

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

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

; your code here 

COMMON-LISP 사용자는 구현 고유의 심볼의 모든 종류를 포함 할 수 있습니다.

SHADOWING-IMPORT를 사용하여 개별 기호를 가져 와서 패키지에 이미 표시되어있는 것을 재정의 할 수도 있습니다 (예 :

(shadowing-import 'ps:*) 
+0

"compiler.lisp"라는 파일의 맨 위에 "compiler"에 대해 "my-awesome-program"을 추가했습니다. [1]> (load "compiler.lisp") >> RENAME -PACKAGE ("SYSTEM") : # 이 잠겼습니다. 이 오류를 무시하면 다음과 같이 표시됩니다. USE-PACKAGE : 이름이 "COMPILER"인 패키지가 없습니다. (load "compiler.lisp") 잘못된 함수입니까? 그것을 요구해야합니까? – gfxmonk

+0

섀도 잉 가져 오기가 작동했습니다. 감사합니다! 패키지 물건을 작동시키지 못하게하기 위해 내가 한 일은 확실하지 않습니다. 언젠가 나중에 그걸 알아 내야 할 것입니다 ... – gfxmonk

+0

나는 당신의 파일을 봐야 할 것입니다. 오류 메시지는 설명에 대한 의미가 없습니다. – Xach