首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBCL ASDF问题与CCL Re:循环参考?

SBCL ASDF问题与CCL Re:循环参考?
EN

Stack Overflow用户
提问于 2019-04-09 01:49:53
回答 2查看 236关注 0票数 0

这在ccl上编译得很好,但循环引用失败。SBCL上的错误:

代码语言:javascript
复制
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">))

(看起来你的帖子主要是代码;请添加更多细节。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-09 16:28:33

代码语言:javascript
复制
(load-system :kp)

您不应该在ASDF声明中包含它。最好不要将系统定义视为Lisp程序,而应仅将其视为声明依赖项的一种声明方式。

如果在声明系统的过程中,您还需要加载另一个系统,那么该系统将成为一个依赖项。最可能发生的情况是,SBCL在评估文件时将其作为一个整体来考虑,而在加载kp时,您要求它加载kp,这实际上是一个循环依赖。也许CCL默默地认为文件已经加载了,我不知道。

如果删除它,那么在REPL中输入(ql:quickload :kp)就可以很好地工作。此外,(in-package :asdf)是无用的(如果提供,它应该是asdf-user)

票数 2
EN

Stack Overflow用户

发布于 2019-04-24 09:26:01

您的.asd无效,应该丢失。

您是否有带有ASDF 3.2或更早版本的旧CCL?那么它就无法检测到你的.asd中的bug。ASDF3.3可正确检测.asd文件加载中的循环依赖关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55579062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档