CRE*_*888 2 lambda common-lisp anonymous-function
我最近一直在读 Paul Graham 的 ANSI Common Lisp,他在其中提到
在 Common Lisp 中,您可以将函数表示为列表,但它们在内部表示为不同的函数对象。所以 lambda 不再是真正必要的。
在第 2 章中。但是,如果我省略 lambda 符号,我将无法编译正确的程序。
我尝试计算 Lisp 函数:(((x) x) 1 )而不是((lambda (x) x) 1 ),这应该与 ANSI Common Lisp 所说的相同。但是,没有 lambda 的代码无法编译。
ACL 第 2 章的完整部分,可在 Paul Graham关于该书的网页上找到。
什么是拉姆达?
lambda 表达式中的 lambda 不是运算符。它只是一个符号。[3] 在 Lisp 的早期方言中,它有一个目的:函数在内部表示为列表,区分函数和普通列表的唯一方法是检查第一个元素是否是符号 lambda。
在 Common Lisp 中,您可以将函数表示为列表,但它们在内部表示为不同的函数对象。所以 lambda 不再是真正必要的。要求函数表示为不会有不一致之处
Run Code Online (Sandbox Code Playgroud)((x) (+ x 100))
代替
Run Code Online (Sandbox Code Playgroud)(lambda (x) (+ x 100))
但 Lisp 程序员习惯于用符号 lambda 来开始函数,因此 Common Lisp 为了传统而保留了它。
(强调是后加的)。
他在这里假设性地谈论该语言如何使用不同的语法来定义函数,而不是lambda像它那样使用。正如 Will 在评论中提到的,至少另一种 Lisp 方言确实接受 -lesslambda形式。然而 Common Lisp 需要它。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |