如何使用quicklisp安装包?(How to use packages installed by

2019-07-30 02:28发布

我已经使用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。

Answer 1:

你混淆了两个不同的概念:一个system和一个package 。 一package是由Common Lisp的标准定义,它是符号的集合,一个方法来控制自己的知名度和使用率。 一个system不是由标准定义,它是由推出了概念ASDF ,这是元数据的集合来管理文件相互依存关系在一个单一的项目,以便能够正确编译并加载它。 Quicklisp是建立在之上ASDF提供一种方法来分发项目的形式描述ASDF system秒。

因此,当您安装( quickload )一个system ,称为PNG ,这并不意味着,该系统有一个包,叫做PNG 。 系统是否定义任何包(通常它定义了一个,甚至几个人),以及如何,他们被称为是作者的自由裁量权。 大多数项目将有package.lisppackages.lisp文件,其中他们的package s的定义。

但在的情况下, CL-PNG系统你加载,它实际上定义了包PNG ,应该在运行过程中会在您之后quickload它。 但是,你应该在每次启动的Lisp系统时间莫名其妙地加载它。 ASDF提供定义的依赖关系的一种手段CL-PNG系统,让你可以只加载自己的 system ,以及所有的system的IT依赖会被自动加载,使得所有可用的package是你想要使用。



文章来源: How to use packages installed by quicklisp?