我有一些lisp初始化代码:
(eval-when (:compile-toplevel :load-toplevel :execute)
(require 'asdf))
(eval-when (:compile-toplevel :load-toplevel :execute)
(push #p"c\:\\lisp\\clsql-4.0.4\\" asdf:*central-registry*))
Run Code Online (Sandbox Code Playgroud)
为什么这个版本会编译,而这个版本:
(eval-when (:compile-toplevel :load-toplevel :execute)
(require 'asdf)
(push #p"c\:\\lisp\\clsql-4.0.4\\" asdf:*central-registry*))
Run Code Online (Sandbox Code Playgroud)
在第3行的编译文件中产生错误,asdf是一个无法识别的包?
我正在使用ccl,并且(require'asdf)被记录为引入ASDF的内置版本.
以下可能在某些细节上不准确,但它大致如下:
Lisp"引擎"经历了四个阶段:读取时间,宏扩展时间,编译时间和运行时间.
每个顶级表单首先完全读入.然而,阅读涉及各个符号的解析.由于在eval-when表单的读取时间内尚未加载ASDF ,asdf:*central-registry*因此无法解析该符号,这会产生上述读取错误.