Common lisp 如何加载和使用quicklisp程序

Common lisp 如何加载和使用quicklisp程序,common-lisp,sbcl,quicklisp,Common Lisp,Sbcl,Quicklisp,我已经设置了quicklisp(使用最新的SBCL)并完成了 我得到了答复 To load "draw-cons-tree": Load 1 ASDF system: draw-cons-tree ; Loading "draw-cons-tree" ("draw-cons-tree") 我检查了一下我的quicklisp目录,发现它已经被下载了,基本上就是下载的内容。那么,在我打开的SBCL REPL中如何实际使用draw cons tree?github网站说: * (dra

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

我得到了答复

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

("draw-cons-tree")
我检查了一下我的
quicklisp
目录,发现它已经被下载了,基本上就是下载的内容。那么,在我打开的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. 

每次我想用它的时候就把它装进去?我试过了,奇怪的是,至少对我来说,我得到了一个重新定义函数的警告列表,一个是
drawtree
。所以我的REPL知道
draw tree
但不知道?这里缺少什么?

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 ...)
或者,定义一个使用该包的新包,或者使用包中的
进入该包以访问其符号,等等


请参阅。

系统
draw-cons-tree
定义了一个名为
draw-cons-tree
的包,该包导出一个名为
draw-tree
的函数。要调用函数,您必须使用该函数的包限定名,即
(draw cons tree:draw tree…
),或将函数名导入当前包(例如,使用
(use package:draw cons tree)
)。我将阅读Seibel一章。然而,我杀死了我的sbcl repl,重新启动了——但不得不做另一个
(ql:quickload“draw cons tree”)
来恢复
draw cons tree
。有趣。我想
(ql:quickload“draw cons tree”)
安装了它,并让任何后续的repl找到了它。我想我已经习惯于Emacs在幕后进行
(require'xyz)
JIT。@147pm quickload在quicklisp/目录下获取系统(以便后续quickload不再获取),然后在当前环境中加载系统(重新启动Sbcl,就像重新启动Emacs一样,清除运行时状态)。Emacs有一个特殊的““自动加载”功能使“require”现在可以加载什么文件;Modules,也称为Modules。不再推荐CL中也存在的require/provide方法;ASDF是更好的替代方法(quicklisp依赖于ASDF)。通常,您只需描述自己的ASDF系统“foo”,特别是其依赖项,然后调用(ql:quickload“foo”)。
(DRAW-CONS-TREE:DRAW-TREE ...)
> (use-package "DRAW-CONS-TREE")
> (draw-tree ...)