Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp lambdas可以有docstring吗?_Lisp_Common Lisp_Ccl - Fatal编程技术网

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的实现那样完整。