【发布时间】:2017-05-13 01:08:04
【问题描述】:
在 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/。
【问题讨论】:
-
编译器宏与常规宏不同。您应该使用
(documentation ... 'function)获取宏文档字符串。
标签: macros documentation common-lisp