Lisp - 无法在 Windows 上加载 .lisp 文件



我在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 更容易 - 因为它可以使用逻辑路径名具有独立于设备/计算机的间接寻址。

最新更新