我使用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。
你混淆了两个不同的概念:a system
和a 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
它取决于将自动加载,使所有可用 package
你想用的。
你混淆了两个不同的概念:a system
和a 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
它取决于将自动加载,使所有可用 package
你想用的。