我在Windows 7上使用clisp 2.49。我启动命令窗口并导航到包含 .lisp 文件的目录。然后我运行 clisp 并尝试加载文件。我收到错误"没有名称为 C 的包"。在这种情况下,C 是指驱动器 C,因为填充的绝对路径以 C:/.. 开头。/../lispFile.我也尝试在 Allegro CL 上加载文件,但遇到了同样的错误。
下面是错误消息的屏幕盖。
错误信息
编辑:我已经确定导致错误消息的代码行是:
(defparameter c:\workdir\aima\ (truename "~/public_html/code/");
"The root directory where the code is stored.")
我不确定语法是否正确。
解决:我弄清楚我做错了什么。我得到了修改 lisp 文件的说明,但误解了它并替换了错误的行部分。这是更正的代码行。
(defparameter *aima-root* (truename "c:\workdir\aima\");
"The root directory where the code is stored.")
请注意,还可以在加载期间计算目录:
(defparameter *aima-root*
(when *load-pathname*
(make-pathname :defaults *load-pathname*
:name nil
:type nil))
"The root directory where the code is stored.")
*load-pathname*
是一个标准的 Common Lisp 变量,在加载时将绑定到类似于用于load
函数的路径名。因此,它指向正在加载的文件。然后,我们构造一个新的路径名,默认值从加载路径名中填充,没有名称和路径名类型组件。
因此,您可以根据该计算设置*aima-root*
变量,并且无论何时加载文件,都会计算出正确的目录。
Common Lisp 变量在加载时*load-pathname*
和*load-truename*
绑定。后者是文件的真实物理路径名。通常我更喜欢使用 *load-pathname*
,这可能与物理路径名结构无关。这里的代码使用函数truename
,因此可能需要使用 *load-truename*
。常见的 Lisp 实现通常通过存储路径名来记录定义函数和其他内容的位置。稍后使用路径名查找文件有时比使用 truename 更容易 - 因为它可以使用逻辑路径名具有独立于设备/计算机的间接寻址。