2015-11-08 82 views
0

定義的常量我有兩個文件,在那裏我已經定義了很多常量的utils的文件,如:無法訪問在另一個文件

(defconstant peca-l0 (make-array (list 3 2) :initial-contents '((T T)(T nil)(T nil)))) 
(defconstant peca-l1 (make-array (list 2 3) :initial-contents '((T nil nil)(T T T)))) 
(defconstant peca-l2 (make-array (list 3 2) :initial-contents '((nil T)(nil T)(T T)))) 
(defconstant peca-l3 (make-array (list 2 3) :initial-contents '((T T T)(nil nil T)))) 

而且在那裏我定義功能的另一個文件。我加載此文件是這樣的:

(load "utils.fas") 

然而,每次我試圖使用它們我有一個警告:

警告:ACCOES在線路121..174:PECA-L1既不聲明也不它將被視爲被宣佈爲SPECIAL。

我該如何解決這個問題?

感謝

回答

0

從HyperSpec約defconstant報價:

如果defconstant形式顯示爲頂級形式,編譯器必須認識到,指名道姓中的常量變量。實現可以選擇在編譯時,加載時或兩者都評估價值表

我不是太熟悉的概念自己,但我猜想,在編譯時你實現只評估常量,那就是當你的文件編譯。因此,在同一個文件中引用這些常量將會起作用。但是當你加載編譯後的文件時,常量的定義不會被評估,因此在加載後你不能訪問它們。

添加一個eval-when應該解決這個問題:

(eval-when (:load-toplevel :compile-toplevel) 
    (defconstant +foo+ 'bar)) 

不過,請注意使用clisp 2.49我無法重現您的問題。

相關問題