Как загрузить и использовать программу quicklisp - PullRequest
2 голосов
/ 04 апреля 2019

Я настроил 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 был слизь, в котором был специальный .el файл для вызова в Emacs для запуска слизи.Нужно ли углубляться в каталог

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

и загружать зверя каждый раз, когда я хочу его использовать?Я попробовал это и, как ни странно для меня, я получаю список ПРЕДУПРЕЖДЕНИЙ переопределенных функций, один из которых draw-tree.Итак, мой REPL знает о draw-tree, но не знает?Что мне здесь не хватает?

1 Ответ

8 голосов
/ 04 апреля 2019

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, чтобы иметь доступ к его символам и т. Д.

См. Программирование в целом: пакеты и символы .

...