问题 如何使用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]

好像我要打电话了 (require :PNG) 在编译我的包之前在REPL上。

如何在不手动调用的情况下为编译器提供CL-PNG包,我该怎么办? require 在REPL上?

更新:我正在使用SBCL。


8950
2018-06-23 17:30


起源



答案:


你混淆了两个不同的概念:a system 和a package。一个package 由Common Lisp标准定义,它是符号的集合,是控制其可见性和使用的一种方式。一个 system 标准没有定义,它是由...引入的概念 ASDF,这是一个元数据集合,用于管理单个项目中的文件相互依赖关系,以便能够正确编译和加载它。 Quicklisp 是建立在 ASDF 提供一种分发项目的方式,以形式描述 ASDF system秒。

所以当你安装(quickload) 一个 system,叫 PNG,这并不意味着,这个系统有一个叫做的包 PNG。系统是否定义任何包(通常它定义一个包,甚至几个包)以及它们的调用方式由作者自行决定。大多数项目都有 package.lisp 要么 packages.lisp 文件,他们的地方 packages是定义的。

但在这种情况下 CL-PNG 你正在加载的系统,它实际上定义了包 PNG,它应该在你之后的运行过程中可用 quickload 它。但是每次启动Lisp系统时都应该以某种方式加载它。 ASDF 提供了一种定义依赖关系的方法 CL-PNG 系统,所以你只能加载 你自己  system和所有的 system它取决于将自动加载,使所有可用 package你想用的。


14
2018-06-23 18:39



你能详细介绍一下ASDF如何提供这个吗?需要什么语法? - Faheem Mitha
用文件查看文件 .asd 延期。更详细地说,语法在这里描述: common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar - Vsevolod Dyomkin
@Faheem Mitha:要快速了解ASDF,请参阅 quickproject。要使新项目可用于Quicklisp,请将新项目放入 local-projects quicklisp发行版的目录(​​参见 blog.quicklisp.org/2011/11/november-quicklisp-updates.html)。 - Miron Brezuleanu
@MironBrezuleanu:谢谢,这看起来很有趣。 - Faheem Mitha


答案:


你混淆了两个不同的概念:a system 和a package。一个package 由Common Lisp标准定义,它是符号的集合,是控制其可见性和使用的一种方式。一个 system 标准没有定义,它是由...引入的概念 ASDF,这是一个元数据集合,用于管理单个项目中的文件相互依赖关系,以便能够正确编译和加载它。 Quicklisp 是建立在 ASDF 提供一种分发项目的方式,以形式描述 ASDF system秒。

所以当你安装(quickload) 一个 system,叫 PNG,这并不意味着,这个系统有一个叫做的包 PNG。系统是否定义任何包(通常它定义一个包,甚至几个包)以及它们的调用方式由作者自行决定。大多数项目都有 package.lisp 要么 packages.lisp 文件,他们的地方 packages是定义的。

但在这种情况下 CL-PNG 你正在加载的系统,它实际上定义了包 PNG,它应该在你之后的运行过程中可用 quickload 它。但是每次启动Lisp系统时都应该以某种方式加载它。 ASDF 提供了一种定义依赖关系的方法 CL-PNG 系统,所以你只能加载 你自己  system和所有的 system它取决于将自动加载,使所有可用 package你想用的。


14
2018-06-23 18:39



你能详细介绍一下ASDF如何提供这个吗?需要什么语法? - Faheem Mitha
用文件查看文件 .asd 延期。更详细地说,语法在这里描述: common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar - Vsevolod Dyomkin
@Faheem Mitha:要快速了解ASDF,请参阅 quickproject。要使新项目可用于Quicklisp,请将新项目放入 local-projects quicklisp发行版的目录(​​参见 blog.quicklisp.org/2011/11/november-quicklisp-updates.html)。 - Miron Brezuleanu
@MironBrezuleanu:谢谢,这看起来很有趣。 - Faheem Mitha