Lisp lambdas可以有docstring吗?
我知道Lisp lambdas可以有docstring吗?,lisp,common-lisp,ccl,Lisp,Common Lisp,Ccl,我知道def*可以有docstring,所以我只想试试lambdas 令人尴尬的是,下面的返回值为零 (documentation (lambda () "a function which always returns nil" nil) 'function) 怎么了?Lambda不能有文档字符串吗?有办法吗?根据HyperSpec部分,语法是: lambda lambda-list [[declaration* | documentation]] form* 因此,文档字符串显然是允许的。
def*
可以有docstring,所以我只想试试lambdas
令人尴尬的是,下面的返回值为零
(documentation (lambda () "a function which always returns nil" nil) 'function)
怎么了?Lambda不能有文档字符串吗?有办法吗?根据HyperSpec部分,语法是:
lambda lambda-list [[declaration* | documentation]] form*
因此,文档字符串显然是允许的。列出两个标准方法签名,如下所示:
documentation (x function) (doc-type (eql 't))
documentation (x function) (doc-type (eql 'function))
和你说的一样
但是,功能说明包括以下警告:
文档字符串可用于调试目的。一致性程序允许在存在文档字符串时使用文档字符串,但其正确行为不应依赖于这些文档字符串的存在。由于实现定义的原因,允许实现随时丢弃文档字符串
因此,虽然从技术上讲,文档字符串没有保存在您的案例中并不是一个bug,但这是一个糟糕的实现。正如Barmar所说,这是可能的,但是可选的 CLISP和SBCL支持匿名lambda函数的文档字符串
CCL、ECL和LispWorks没有。lambdas可以有docstring…那么如何获取它们?不知道为什么这会为您返回一个nil,它会从sbcl和clisp中的REPL为我返回字符串“一个在cslispWorks中始终返回nil的函数”。你用的是哪一个lisp?我用的是CCL。似乎是CCL中的一个bug。为什么实现得很差?考虑到这些规范,我认为依赖于读回docstring的能力的CL代码是糟糕的代码。因为人们用CL实现做的事情比仅仅运行代码要多,所以他们还需要用它来编写和调试。如果一个实现忽略了docstring,则会使这些任务变得更加困难,因此它不像不忽略docstring的实现那样完整。