Lisp Can';t访问另一个文件中定义的常量

Lisp Can';t访问另一个文件中定义的常量,lisp,clisp,Lisp,Clisp,我有两个文件,一个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

我有两个文件,一个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")
还有另一个我定义函数的文件。我按如下方式加载此文件:

(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")
然而,每次我尝试使用它们时,我都有一个警告:

警告:根据第121..174行:PECA-L1既没有声明也没有约束,它将被视为特殊声明

我怎样才能解决这个问题


感谢您从HyperSpec中引用以下内容:

如果
defcontent
表单显示为顶级表单,编译器必须识别该名称为常量变量。实现可以选择在编译时、加载时或两者同时计算值形式。

我自己对这个概念不太熟悉,但我猜您的实现只在编译时(即编译文件时)计算常量。因此,同一文件中对这些常量的引用将起作用。但是,当您加载编译后的文件时,不会计算常量的定义,因此您无法在加载后访问它们

添加应用程序应该可以解决此问题:

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

但是请注意,使用
clisp 2.49
我无法重现您的问题