从函数文档的介绍中得知:
像`quote'一样,但更适用于函数作为对象。 在字节编译中,`function'会导致其参数被编译。 `quote'不能做到这一点。
因此,可以进行#'(lambda ...)
操作以启用 lambda 形式的字节编译。
另一方面,在官方手册中有提到,现在已经不再需要这样做了。
lambda 表达式有一个额外的作用:通过使用
function
作为子程序告诉 Emacs 评估器和字节编译器其参数是一个函数。
[...] 以下形式都是等效的:
(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))
在这种情况下,该函数形式无用。
是否有其他情况需要使用函数形式?
是否存在既不必要也不等同于quote
的情况?
(lambda ...)
并不总是等同于(function (lambda ...))
,因此对于您的问题的一个答案是:“是的,在足够旧的 Emacs 版本中是这样的”。 - philsquote
进行了比较。你应该优先选择(funcall (lambda ...) ...)
或(funcall (function (lambda ...)) ...)
而不是(funcall (quote (lambda ...)) ...)
。在前者中,你得到了一个编译后的函数;而在后者中,你有一个字面上的列表。 - Joshua Taylorlambda
作为一个宏被添加到了1992年(由Jim Blandy)的function
中,即Emacs-19。因此,虽然在Emacs-18中等价性不成立,但那是很久以前的事了。我仍然在这里使用Emacs-19,但我没有Emacs-18二进制文件。 - Stefan