gpt4 book ai didi

lisp - 如何使用 quicklisp 安装的包?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:38 26 4
gpt4 key购买 nike

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

如果不在 REPL 上手动调用 require,我需要做什么才能使 CL-PNG 包可用于编译器?

更新:我正在使用 SBCL。

最佳答案

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

所以当你安装(quickload)一个名为PNG系统时,这并不意味着这个系统有一个包,称为 PNG。系统是否定义任何包(通常它定义一个,甚至几个)以及如何调用它们由其作者自行决定。大多数项目都有 package.lisppackages.lisp 文件,其中定义了它们的 package

但是对于你正在加载的CL-PNG系统,它实际上定义了包PNG,并且在你quickload 它。但是你应该在每次启动你的 Lisp 系统时以某种方式加载它。 ASDF 提供了一种方法来定义对CL-PNG 系统的依赖,这样你就可以只加载你自己的 系统,它所依赖的所有 system 都将自动加载,使您要使用的所有 package 都可用。

关于lisp - 如何使用 quicklisp 安装的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com