lambdas可以有docstrings吗?

时间:2013-05-26 04:07:38

标签: lisp common-lisp ccl

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

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

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

怎么了? lambdas不能有docstrings吗?有办法吗?

2 个答案:

答案 0 :(得分:7)

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

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

所以显然允许使用doc字符串。 Standard Generic Function DOCUMENTATION, (SETF DOCUMENTATION)列出了两个标准方法签名:

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

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

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

  

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

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

答案 1 :(得分:1)

巴马尔说,这是可能的,但是可选的。

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

CCL,ECL和LispWorks没有。