首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quicklisp:使用加载的库

Quicklisp:使用加载的库
EN

Stack Overflow用户
提问于 2014-05-12 21:29:49
回答 1查看 438关注 0票数 3

我已经将Quicklisp设置为每当SBCL运行时运行,并在我的文件顶部添加了下面一行,我试图在其中使用 library (正如我前面问题Priority queue for Common Lisp?的回答中所建议的)。然而,当我尝试使用它时,我会从SBCL中得到错误,说来自priority-queue的函数是没有定义的!我遗漏了什么?

作为参考,我试着写了这样的东西:

代码语言:javascript
复制
(ql:quickload "priority-queue")

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

我收到一个错误,说make-pqueue没有定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-12 23:23:36

在普通的lisp中,任何名称(变量、函数、宏)都附加到符号上。在这种情况下,您有一个附加到符号make-pqueue的函数。使用包将符号彼此分开。这使冲突保持在最小程度,并且还允许内部变量/函数等不是由包导出的内容。

听起来你需要做三件事之一:

  1. 在函数之前使用包名:(priority-queue:make-pqueue #'<)。如果希望阅读源代码的人确切地知道正在运行的代码,则此方法是很好的。但是,如果您多次调用该包,它可能会变得非常麻烦。
  2. 在当前包中使用priority-queue包: (使用-包:优先级-队列) (make-pqueue #'<) 这样做的目的是将每个导出的符号从priority-queue包导入到当前包中(很可能是cl-user)。虽然这对测试很有好处,但是您通常希望创建自己的包。见下一项。
  3. 定义您自己的使用优先级队列的包: (卸载包:队列测试(:use :cl :优先级-queue))(包内:queue-test) (make-pqueue #'<)

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23619181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档