如何加载和使用quicklisp程序

147*_*7pm 2 sbcl common-lisp quicklisp

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

* (ql:quickload "draw-cons-tree")
Run Code Online (Sandbox Code Playgroud)

我得到答复

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

("draw-cons-tree")
Run Code Online (Sandbox Code Playgroud)

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

* (draw-tree '(a b (c nil 1)))
Run Code Online (Sandbox Code Playgroud)

应该产生

[o|o]---[o|o]---[o|/]
 |       |       |      
 A       B      [o|o]---[o|o]---[o|/]
                 |       |       |      
                 C      NIL      1      
NIL
Run Code Online (Sandbox Code Playgroud)

但我正在

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

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

~/quicklisp/dists/quicklisp/software/draw-cons-tree-20131003-git/draw-cons-tree.lisp
Run Code Online (Sandbox Code Playgroud)

每次我要使用它并加载野兽?我尝试了一下,至少令我感到奇怪的是,我得到了重新定义函数的警告列表,一个是draw-tree。所以我的REPL知道draw-tree但不是吗?我在这里想念什么?

cor*_*ump 8

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)
Run Code Online (Sandbox Code Playgroud)

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

(DRAW-CONS-TREE:DRAW-TREE ...)
Run Code Online (Sandbox Code Playgroud)

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

> (use-package "DRAW-CONS-TREE")
> (draw-tree ...)
Run Code Online (Sandbox Code Playgroud)

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

请参阅以大程序编程:程序包和符号