gpt4 book ai didi

macros - 通用 Lisp : Getting the documentation string of a macro

转载 作者:行者123 更新时间:2023-12-01 09:16:14 34 4
gpt4 key购买 nike

在 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/ .

最佳答案

标准说的是 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 定义.

    关于macros - 通用 Lisp : Getting the documentation string of a macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948271/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com