如何探索 Common Lisp 图像

How to explore a Common Lisp image

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

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

有这样的探索者吗?我正在使用 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 表示如果符号没有命名 class,则不应报告错误)、(symbol-plist symbol) 等来实现.

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


感谢 David Hodge 指出以下内容:

A package called repl-utilities from Rob Warnock has a neat function called summary which shows each function, global variable with associated docstrings

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

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