Lisp 为什么必须';要求';在单独的表达式中求值以使用包
我有一些lisp初始化代码:Lisp 为什么必须';要求';在单独的表达式中求值以使用包,lisp,common-lisp,Lisp,Common Lisp,我有一些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*)) 为什么要编译该版本,而此版本: (eval-when (:compile-topl
(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*))
为什么要编译该版本,而此版本:
(eval-when (:compile-toplevel :load-toplevel :execute)
(require 'asdf)
(push #p"c\:\\lisp\\clsql-4.0.4\\" asdf:*central-registry*))
在第三行编译文件时产生错误,asdf包无法识别
我正在使用ccl,并且(require'asdf)被记录为引入了asdf的内置版本。以下内容在某些细节上可能不准确,但大致如下: Lisp“引擎”经历四个阶段:读取时、宏扩展时、编译时和运行时
每个顶级表单首先被完全读入。然而,阅读涉及到各自符号的解析。由于ASDF在
eval when
窗体的读取期间尚未加载,因此符号ASDF:*中央注册表*
尚未解析,这会产生所述的读取错误。请参阅Svante的答案
有时候你可能想解决这个问题。然后,您需要在运行时在代码中查找符号
(push somepath (symbol-value (find-symbol "*CENTRAL-REGISTRY*" "ASDF")))
可以使用上面的代码,因为符号asdf:*centralregistry*不直接使用,而是在运行时使用符号名和包名进行查找