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