Gra*_*ent 4 emacs common-lisp slime
有没有办法探索 Common Lisp 图像的当前状态(即加载的包、可用的符号等)?
我知道命令(apropos "foo"),但我想查看整个图像的当前状态。
有这样的探险家吗?我正在使用 SBCL 和 SLIME(在 Emacs 中)。
您可以使用以下命令列出所有现有包:
(list-all-packages)
Run Code Online (Sandbox Code Playgroud)
对于给定的包,您可以迭代其所有符号或其外部符号:
(do-symbols (sym package)
...)
(do-external-symbols (sym package)
...)
Run Code Online (Sandbox Code Playgroud)
您也可以直接列出所有包中的所有符号:
(do-all-symbols (sym)
...)
Run Code Online (Sandbox Code Playgroud)
使用 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.
Run Code Online (Sandbox Code Playgroud)
上面的NUMBER和COMMON-LISP文字也是按钮,可以点击访问关联值。如果你只使用SBCL,同样可以通过调用(find-class symbol nil)(NIL表示如果符号没有命名一个类就不应该报告错误)(symbol-plist symbol),等等来实现。
根据标准,有些东西是无法内省的,例如结构或所有用户定义类型的列表deftype(可能是其他东西)。根据您想要做什么,您可能需要查看执行此操作的特定于实现的方法。
感谢 David Hodge 指出以下几点:
来自 Rob Warnock 的名为 repl-utilities 的包有一个名为 summary 的简洁函数,它显示了每个函数、具有关联文档字符串的全局变量