无法访问在另一个文件

问题描述:

定义的常量我有两个文件,在那里我已经定义了很多常量的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。

我该如何解决这个问题?

感谢

从HyperSpec约defconstant报价:

如果defconstant形式显示为*形式,编译器必须认识到,指名道姓中的常量变量。实现可以选择在编译时,加载时或两者都评估价值表

我不是太熟悉的概念自己,但我猜想,在编译时你实现只评估常量,那就是当你的文件编译。因此,在同一个文件中引用这些常量将会起作用。但是当你加载编译后的文件时,常量的定义不会被评估,因此在加载后你不能访问它们。

添加一个eval-when应该解决这个问题:

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

不过,请注意使用clisp 2.49我无法重现您的问题。