在SBCL中,我可以获得一个函数的文档字符串,如下所示:
(documentation #'mapcar t)
但是,我不了解如何获取宏的文档字符串。例如,给定宏:
(defmacro with-lines-in-file ((line filename) &body body)
"Runs body for each line in the file specified by filename."
(let ((file (gensym)))
`(with-open-file (,file ,filename)
(do ((,line (read-line ,file nil) (read-line ,file nil)))
((null ,line) nil)
,@body))))
我无法检索文档字符串。我不了解CLHS。如下所示,CLHS非常适合获取函数的文档字符串。
documentation (x function) (doc-type (eql 't))
但是,从宏中获取文档字符串的位似乎对我不起作用:
documentation (x symbol) (doc-type (eql 'compiler-macro))
在我的宏观背景下,我将上述CLHS位解释为:
(documentation 'with-lines-in-file 'compiler-macro)
但是那个电话会回复NIL。
我正在尝试构建一个函数,为我计划在GitHub上共享的Common Lisp包创建README.md文件。这是一个例子:https://github.com/macnod/dc-utilities。我在这里写了一篇关于此的帖子:https://donnieknows.com/documenting-common-lisp-for-github/。
答案 0 :(得分:8)
该标准针对Common Lisp函数documentation:
功能 如果x是函数名称,则返回名称为x的函数,宏或特殊运算符的文档字符串。
三个运算符类型可以从中检索文档,因此参数function
是:
请记住,在Common Lisp中,运营商一次只能是其中之一。
实施例
CL-USER> (defmacro foomacro () "foo macro" '(foo))
FOOMACRO
CL-USER> (documentation 'foomacro 'function)
"foo macro"
宏不是编译器宏。这些由DEFINE-COMPILER-MACRO定义。