2

我知道它def*可以有文档字符串,所以我只是尝试一下 lambdas。

令人尴尬的是,以下返回 NIL。

(documentation (lambda () "a function which always returns nil" nil) 'function)

怎么了?lambdas 不能有文档字符串吗?有没有办法做到这一点?

4

2 回答 2

7

根据 HyperSpec 部分Symbol LAMBDA,语法是:

lambda lambda-list [[declaration* | documentation]] form*

因此明确允许使用文档字符串。标准通用函数文档(SETF DOCUMENTATION)列出了两个标准方法签名:

documentation (x function) (doc-type (eql 't))
documentation (x function) (doc-type (eql 'function))

这与您尝试调用它的方式相匹配。

但是,功能描述包括以下警告:

文档字符串可用于调试目的。允许符合标准的程序在存在文档字符串时使用它们,但它们的正确行为不应依赖于这些文档字符串的存在。出于实现定义的原因,允许实现随时丢弃文档字符串。

因此,虽然从技术上讲,在您的情况下没有保存文档字符串并不是一个错误,但这是一个糟糕的实现。

于 2013-05-26T04:44:48.557 回答
1

正如 Barmar 所说,这是可能的,但也是可选的。

CLISP 和 SBCL 支持匿名 lambda 函数的文档字符串。

CCL、ECL 和 LispWorks 没有。

于 2013-05-26T15:00:39.023 回答