如何在Common Lisp REPL中查看docstrings和其他符号信息?

时间:2011-02-23 16:11:06

标签: documentation lisp common-lisp read-eval-print-loop

我是CL的新手,我想学习如何阅读文档字符串并从REPL获取其他帮助信息。类似于Python中的help(symbol),或iPython中的symbol?,或Haskell的GHCi中的:t:i

所以,给定一个符号名称,我希望能够知道:

  • 它绑定的是什么类型的值,如果有的话(函数,变量,根本没有)
  • 如果是函数或宏,那么它的位置参数是什么
  • 如果有文档字符串,请显示
  • 它来自哪个包或文件或何时定义

我发现有(documentation '_symbol_ '_type_),但这并不是我需要的。在使用'function之前,我需要知道符号绑定到的值的类型('variable'compiler-macrodocumentation等)。然后它只返回docstring,它可能丢失或不足以使用该符号。

例如,在Lisp中,mapcar的帮助不是很有用(CLisp的REPL):

> (documentation 'mapcar 'function)
NIL

我希望能够看到类似的东西:

>>> map?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:    <built-in function map>
Namespace:  Python builtin
Docstring:
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence, substituting None for missing values when not all
    sequences have the same length.  If the function is None, return a list of
    the items of the sequence (or a list of tuples if more than one sequence).

2 个答案:

答案 0 :(得分:28)

如上所述,Common Lisp具有标准功能:DESCRIBEINSPECTDOCUMENTATION。典型的Lisp IDE也将这些绑定到键和菜单。

对于标准Common Lisp功能,大多数IDE通过击键直接链接到Common Lisp HyperSpec文档。

大多数IDE也都有按键来显示arglist和文档。还有'空间arglist'功能。

LispWorks特定示例:LispWorks Argument list informationLispWorks Expressions menu

我建议您阅读SlimeLispWorks EditorAllegro CL's ELI或您正在使用的任何IDE的IDE手册。

答案 1 :(得分:6)

关于获取符号类型的问题:没有这样的事情。或者,更准确地说,符号不仅仅是其他对象的名称,而是自身SYMBOL类型的对象。每个符号都可以包含变量值和函数值。要检查它是否具有变量值,请使用BOUNDP,并检查函数值FBOUNDP