common-lisp - 我可以(asdf :load-system :foo),,但asdf仍然提示 '"foo“没有指定包”

标签 common-lisp sbcl quicklisp asdf

为了最终开始在我的 lisp 涂鸦中使用 asdf,我尝试设置一个简单的示例。这些文件是

; contents of example.asd
(asdf:defsystem "example"
   :name "example"
   :depends-on ("foo")
   :components ((:file "example")))

; contents of example.lisp
(defpackage :example
   (:use :cl :asdf :foo))
(in-package :example)

(其中“foo”实际上是“cl-wav”,但问题仍然存在于我本地安装的任何软件包中)。

现在,即使正在运行

(asdf:load-system :foo)

当我尝试评估时有效

(asdf:make :example)

我收到此错误消息:

The name "FOO" does not designate any package.

我做错了什么?

就上下文而言,我的 asdf 版本是“3.1.5”,包“foo”与 Quicklisp(最新版本)一起安装,所有这些都发生在 SBCL 1.3.20 中。

最佳答案

ASDF 系统与软件包不同。系统只是将一堆文件组合到单个应用程序或库中的一种方式,可以使用 Quicklisp 轻松编译、加载、测试或安装。单个系统中可能有多个包(甚至没有,尽管这很奇怪)。通常,库有一个与系统同名的“主”包,但这不是强制性的。

在本例中,系统 cl-wav 定义了一个名为 WAV 的包,因此您需要在包定义中使用它。对于库作者来说,将包命名为 CL-WAV 并使用 WAV 作为昵称可能会更好,但他们没有这样做。

(defpackage :example
  (:use :cl :asdf :wav))

关于common-lisp - 我可以(asdf :load-system :foo),,但asdf仍然提示 '"foo“没有指定包”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131436/

相关文章:

common-lisp - Lispworks 中的 Quicklisp 错误

localization - 无法从 Lisp Portable AllegroServe 提供国际字符

common-lisp - 连接到 Slack IRC 网关时出错

lisp - sbcl(目录 "*")未返回所有文件(例如缺少 *.lisp)

namespaces - 为什么有多个命名空间?

lisp - 遵循 lisp 代码库中的定义

lisp - 我可以将 lambda 与即时 lambda 列表(没有宏)一起使用吗?

installation - 在 Quicklisp 中找不到文件

lisp - Quicklisp 覆盖默认系统