我已经使用quicklisp安装了CL-PNG包。
(ql:quicklisp 'png)
现在我想定义自己的包,它依赖于CL-PNG包。 像这样:
(defpackage :FOO
(:use :CL :PNG)
(:export :BAR))
当编译它,我得到这个错误:
The name "PNG" does not designate any package.
[Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]
看来,我得打电话(require :PNG)
编译我的包之前的REPL。
我有什么做的,使可用于编译器CL-PNG包,而无需手动调用require
的REPL?
更新:我使用SBCL。
你混淆了两个不同的概念:一个system
和一个package
。 一package
是由Common Lisp的标准定义,它是符号的集合,一个方法来控制自己的知名度和使用率。 一个system
不是由标准定义,它是由推出了概念ASDF
,这是元数据的集合来管理文件相互依存关系在一个单一的项目,以便能够正确编译并加载它。 Quicklisp
是建立在之上ASDF
提供一种方法来分发项目的形式描述ASDF system
秒。
因此,当您安装( quickload
)一个system
,称为PNG
,这并不意味着,该系统有一个包,叫做PNG
。 系统是否定义任何包(通常它定义了一个,甚至几个人),以及如何,他们被称为是作者的自由裁量权。 大多数项目将有package.lisp
或packages.lisp
文件,其中他们的package
s的定义。
但在的情况下, CL-PNG
系统你加载,它实际上定义了包PNG
,应该在运行过程中会在您之后quickload
它。 但是,你应该在每次启动的Lisp系统时间莫名其妙地加载它。 ASDF
提供定义的依赖关系的一种手段CL-PNG
系统,让你可以只加载自己的 system
,以及所有的system
的IT依赖会被自动加载,使得所有可用的package
是你想要使用。