gpt4 book ai didi

common-lisp - Quicklisp:使用加载的库

转载 作者:行者123 更新时间:2023-12-03 07:45:16 25 4
gpt4 key购买 nike

我已将 Quicklisp 设置为在 SBCL 运行时运行,并将以下行添加到我尝试使用 priority-queue library 的文件顶部。 (正如我之前的问题 Priority queue for Common Lisp? 的答案中所建议的)。但是,当我尝试使用它时,我从 SBCL 收到错误,指出 priority-queue 中的函数未定义!我错过了什么?

作为引用,我尝试写这样的内容:

(ql:quickload "priority-queue")

(defparameter *heap* (make-pqueue #'<))

我收到一条错误消息,指出 make-pqueue 未定义。

最佳答案

在 common lisp 中,任何被命名的东西(变量、函数、宏)都附加到一个符号上。在本例中,您有一个附加到符号 make-pqueue 的函数。 。符号通过包相互分离。这可以将冲突降至最低,并且还允许使用包未导出的内部变量/函数之类的内容。

听起来您需要执行以下三件事之一:

  1. 在函数前使用包名:(priority-queue:make-pqueue #'<) 。如果您希望阅读源代码的人准确了解正在运行的代码,则此方法非常有用。但是,如果多次调用该包,可能会变得很麻烦。
  2. 使用 priority-queue包在您当前所在的包中:

    (use-package :priority-queue)
    (make-pqueue #'<)

    它的作用是导入 priority-queue 中的每个导出符号。打包到您当前所在的包中(很可能是 cl-user )。虽然这对于测试很有好处,但您通常希望创建自己的包。请参阅下一项。

  3. 定义您自己的使用优先级队列的包:

    (defpackage :queue-test (:use :cl :priority-queue))
    (in-package :queue-test)
    (make-pqueue #'<)

定义您自己的包一开始似乎需要大量工作,但您会开始喜欢这种分离,特别是当您开始将不同的代码片段集成在一起时。

关于common-lisp - Quicklisp:使用加载的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619181/

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