这在ccl上编译得很好,但循环引用失败。SBCL上的错误:
kp.asd:
(in-package :asdf)
(defsystem kp
:components
((:module "utils"
:components
((:file "utils")
))
))
(load-system :kp)
------------------------
utils.lisp:
(defpackage :utils)
(in-package :utils)
(defvar *kp-version-utime* (get-universal-time))
------------------------
Error reported by SBCL:
debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR in thread #<THREAD "main thread" RUNNING {10005E85B3}>: Error while trying to load definition for \
system kp from pathname /var/www/ai/insights/kp.asd: Circular dependency: ((#<DEFINE-OP > . #<SYSTEM "kp">) (#<LOAD-OP > . #<SYSTEM "kp">) (#<LOAD-OP\
> . #<MODULE "kp" "utils">) (#<LOAD-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREPARE-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREP\
ARE-OP > . #<MODULE "kp" "utils">) (#<PREPARE-OP > . #<SYSTEM "kp">))(看起来你的帖子主要是代码;请添加更多细节。)
发布于 2019-04-09 16:28:33
(load-system :kp)您不应该在ASDF声明中包含它。最好不要将系统定义视为Lisp程序,而应仅将其视为声明依赖项的一种声明方式。
如果在声明系统的过程中,您还需要加载另一个系统,那么该系统将成为一个依赖项。最可能发生的情况是,SBCL在评估文件时将其作为一个整体来考虑,而在加载kp时,您要求它加载kp,这实际上是一个循环依赖。也许CCL默默地认为文件已经加载了,我不知道。
如果删除它,那么在REPL中输入(ql:quickload :kp)就可以很好地工作。此外,(in-package :asdf)是无用的(如果提供,它应该是asdf-user)
发布于 2019-04-24 09:26:01
您的.asd无效,应该丢失。
您是否有带有ASDF 3.2或更早版本的旧CCL?那么它就无法检测到你的.asd中的bug。ASDF3.3可正确检测.asd文件加载中的循环依赖关系。
https://stackoverflow.com/questions/55579062
复制相似问题