【问题标题】:Common Lisp: Getting the documentation string of a macroCommon Lisp:获取宏的文档字符串
【发布时间】: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


【解决方案1】:

标准对 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 定义的。

【讨论】:

  • 感谢您的回答。我了解到我需要更仔细地阅读文档。我很抱歉时间太糟了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多