如何探索 Common Lisp 图像

问题描述

有没有办法探索 Common Lisp 图像的当前状态(即加载的包、可用的符号等)?

我知道命令 Some(s),但我想查看整个图像的当前状态。

有这样的探险家吗?我正在使用 SBCL 和 SLIME(在 Emacs 中)。

解决方法

您可以列出所有现有的包:

(list-all-packages)

对于给定的包,您可以迭代其所有符号或其外部符号:

(do-symbols (sym package)
  ...)

(do-external-symbols (sym package)
  ...)

你也可以直接列出所有包中的所有符号:

(do-all-symbols (sym)
  ...)

当使用 Slime 时,用 slime-inspect 检查一个符号会给出以该符号命名的所有事物的摘要;例如,如果我检查 'number,则会显示以下内容:

#<SYMBOL {5024C0CF}>
--------------------
Its name is: "NUMBER"
It is unbound.
It has no function value.
It is external to the package: COMMON-LISP [unintern]
Property list: NIL
It names the class NUMBER [remove]
It names a primitive type-specifier.

上面的 NUMBERCOMMON-LISP 文本也是按钮,您可以点击这些按钮访问关联的值。如果你只使用 SBCL,同样可以通过调用 (find-class symbol nil)(NIL 表示如果符号没有命名类不应该报告错误)、(symbol-plist symbol) 等来实现。

根据标准,有些东西是无法内省的,比如结构体或所有用 deftype 引入的用户定义类型的列表(也许是其他东西)。根据您要执行的操作,您可能需要查看特定于实现的方法。


感谢大卫·霍奇指出以下几点:

来自 Rob Warnock 的名为 repl-utilities 的包有一个名为 summary 的简洁函数,它显示了每个函数、全局变量以及相关的文档字符串

,

这是一个图形化的网络浏览器:https://github.com/lokedhs/docbrowser

一旦启动,它会显示第一页,其中包含当前映像中加载的所有可用包的列表。点击一个包会显示它的函数和参数,以及它们的文档字符串,点击一个会显示它的源代码。

enter image description here