如何使用quicklisp安装的软件包?

如何使用quicklisp安装的软件包?,lisp,common-lisp,packages,sbcl,quicklisp,Lisp,Common Lisp,Packages,Sbcl,Quicklisp,我已经使用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] 在编译包之

我已经使用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]
在编译包之前,我似乎必须在REPL上调用
(require:PNG)

要使CL-PNG包可用于编译器,而无需在REPL上手动调用
require
,我必须做些什么


更新:我使用的是SBCL。

您混淆了两个独立的概念:系统和包。
由公共Lisp标准定义,它是符号的集合,是控制其可见性和使用的一种方式。标准未定义
系统
,它是由
ASDF
引入的一个概念,ASDF是一个元数据集合,用于管理单个项目中的文件相互依赖关系,以便能够正确编译和加载它
Quicklisp
构建在
ASDF
之上,以
ASDF系统
s的形式描述了一种分发项目的方法

因此,当您安装(
quickload
)一个名为
PNG
系统时,这并不意味着该系统有一个名为
PNG
的包。系统是否定义了任何包(通常它定义了一个或几个包)以及如何调用它们是由其作者决定的。大多数项目都有
package.lisp
packages.lisp
文件,在这些文件中定义了它们的
package
s


但是在您正在加载的
CL-PNG
系统中,它实际上定义了包
PNG
,并且在您加载
quickload
之后,它应该在运行过程中可用。但每次启动Lisp系统时都应该加载它
ASDF
提供了一种定义对
CL-PNG
系统依赖关系的方法,这样您就可以只加载您自己的
系统
,它所依赖的所有
系统将自动加载,提供所有您想要使用的
软件包。

您能详细说明ASDF是如何提供这些功能的吗?需要什么语法?查看扩展名为
.asd
的文件。这里更详细地描述了语法:@Faheem Mitha:有关开始使用ASDF的快速方法,请参阅。要使新项目可供Quicklisp使用,请将新项目放在Quicklisp发行版的
本地项目
目录中(请参阅)。@MironBrezuleanu:谢谢,这看起来很有趣。