我已经设置了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
目录,发现目录已经下载,基本上是these的内容。那么,如何在已打开的SBCL REPL中实际使用draw-cons-tree
? 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的唯一真正的体验是史莱姆,它有一个特定的.el
文件可在Emacs中调用以使史莱姆运行。我需要深入查看目录
~/quicklisp/dists/quicklisp/software/draw-cons-tree-20131003-git/draw-cons-tree.lisp
每次我要使用野兽时加载它?我尝试了一下,至少令我感到奇怪的是,我得到了重新定义函数的警告列表,其中一个是draw-tree
。因此我的REPL知道draw-tree
,但不是吗?我在这里想念什么?
答案 0 :(得分:7)
Quicklisp加载了一个系统,该系统可能会向您的环境添加零个,一个或多个软件包。有时,这些软件包的名称很容易猜到,例如,当您安装系统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
进入该软件包以访问其符号等。