首页 > 解决方案 > 如何加载和使用 quicklisp 程序

问题描述

我已经设置了 quicklisp(使用最新的 SBCL)并完成了

* (ql:quickload "draw-cons-tree")

我得到了答复

To load "draw-cons-tree":
  Load 1 ASDF system:
    draw-cons-tree
; Loading "draw-cons-tree"

("draw-cons-tree")

我检查了我的quicklisp目录,发现它已被下载,基本上就是这些内容。draw-cons-tree那么在我打开的 SBCL REPL 中如何实际使用呢?github网站说:

* (draw-tree '(a b (c nil 1)))

应该产生

[o|o]---[o|o]---[o|/]
 |       |       |      
 A       B      [o|o]---[o|o]---[o|/]
                 |       |       |      
                 C      NIL      1      
NIL

但我只是得到

debugger invoked on a UNDEFINED-FUNCTION in thread
#<THREAD "main thread" RUNNING {10005385B3}>:
  The function COMMON-LISP-USER::DRAW-TREE is undefined. 

我在这里想念什么?我对 quicklisp 的唯一其他真实体验是 slime,它有一个特定的.el文件可以在 Emacs 中调用来让 slime 运行。我是否需要深入目录

~/quicklisp/dists/quicklisp/software/draw-cons-tree-20131003-git/draw-cons-tree.lisp

每次我想使用它时加载野兽?我试过了,至少对我来说奇怪的是,我得到了一个重新定义函数的警告列表,一个是draw-tree. 所以我的 REPL 知道draw-tree但不知道?我在这里想念什么?

标签: common-lispsbclquicklisp

解决方案


Quicklisp 加载一个系统,该系统可能会向您的环境添加零个、一个或多个包。有时这些包的名称很容易猜到,比如当你安装 system 时cl-ppcre,你有一个名为的包"CL-PPCRE",你可以从中运行一些东西。有时您必须阅读文档才能知道如何使用您安装的系统。

但如果您正在寻找特定功能,那么您可以使用apropos

CL-USER> (apropos "draw-tree")
DRAW-CONS-TREE::%DRAW-TREE
DRAW-CONS-TREE:DRAW-TREE (fbound)
:DRAW-TREE (bound)

在这里,有一个导出的符号,或者使用它的完全限定名称来调用它:

(DRAW-CONS-TREE:DRAW-TREE ...)

或者先使用包,以便可以从当前包中访问符号:

> (use-package "DRAW-CONS-TREE")
> (draw-tree ...)

或者,定义一个使用该包的新包,或者进入该包in-package以访问其符号等。

请参阅大型编程:包和符号


推荐阅读