4

我对 LISP 很陌生。我正在使用 allegro-cl。我很难调用我定义和加载的函数。我想知道有哪些方法可以浏览我定义的内容,例如列出某个包中的所有方法,或仅列出变量,或列出包名称等。

4

3 回答 3

4

我没有使用 Allegro CL,所以我只能告诉你 CL 本身为此提供的工具。您可能想查看 Allegro CL IDE 为该任务提供的功能。

您可以使用函数 LIST-ALL-PACKAGES 获取所有包的列表。你可以像这样使用它来打印他们的名字:

(dolist (p (list-all-packages)) (write-line (package-name p)))

CL 包是符号(即名称)的集合,而不是与这些名称相关的对象。您必须进一步查询其中的名称,以查看是否为该符号定义了值和/或函数。您可以使用DO-SYMBOLS循环遍历包中的所有符号。这将打印当前包中的所有符号:

(do-symbols (s) (print s)

这只有功能:

(do-symbols (s) (when (fboundp s) (print s)))

这仅是其主包是当前包的功能:

(do-symbols (s)
  (when (and (eq (symbol-package s) *package*)
             (fboundp s))
    (print s)))
于 2011-01-24T18:28:31.277 回答
3

如果你记得部分名称,你可以随时使用 APROPOS(可能仅限于特定的包)来查找全名。

于 2011-01-25T10:06:12.247 回答
0

我遇到了同样的问题。阅读文档后,我认为无法回忆输入到 REPL 中的定义。

为了解决这个问题,我总是在编辑器窗口中输入(Ctrl+N 如果不存在)。通过这种方式,我可以非常方便地键入定义、编辑它们等。如果我需要评估定义,我按 Ctrl+E 进行增量评估(请参阅工具菜单中的其他选项)。我在左侧保留一个侦听器窗口,在右侧保留一个编辑器窗口以查看输入和输出。

还有一个小问题甚至可能导致一些错误:如果您在对定义进行更改后忘记评估定义,旧的定义仍保留在 REPL 中。继续按 Ctrl+E。

如果您打开了多个文件并希望在其中一个源文件中找到定义,您可以使用 Search>Apropos。

于 2011-08-05T08:57:56.757 回答