Common Lisp 中是否需要使用 lambda 符号?

问题描述 投票:0回答:1

我最近一直在读 Paul Graham 的 ANSI Common Lisp,他在其中提到

在 Common Lisp 中,您可以将函数表示为列表,但它们在内部表示为不同的函数对象。所以 lambda 不再是真正必要的。

在第 2 章中。但是,如果我省略 lambda 符号,我将无法编译正确的程序。

我尝试计算lisp函数:

(((x) x) 1 )
而不是
((lambda (x) x) 1 )
,这应该与ANSI Common Lisp所说的相同。但是,没有 lambda 的代码无法编译。

lambda common-lisp
1个回答
0
投票

作者网站上提供的 ACL 第 2 章的完整部分

什么是 Lambda?

lambda 表达式中的 lambda 不是运算符。这只是 一个符号。 [3] 在 Lisp 的早期方言中,它有一个目的: 函数在内部表示为列表,唯一的方法 区分函数和普通列表的方法是检查第一个函数是否是 元素是符号 lambda。
在 Common Lisp 中,您可以将函数表示为列表,但它们是 内部表示为不同的函数对象。所以拉姆达是 不再真正需要。不会出现不一致的情况 要求函数表示为

((x) (+ x 100))

而不是

(lambda (x) (+ x 100))

但是 Lisp 程序员习惯于用 符号 lambda,

因此 Common Lisp 为了传统而保留了它。

(已添加强调)。

他在这里假设地谈论语言

可能如何具有不同的语法来定义函数,而不是像它那样使用lambda

。正如 Will 在评论中提到的,至少另一种 Lisp 方言确实接受无 
lambda
 的形式。然而 Common Lisp 需要它。

© www.soinside.com 2019 - 2024. All rights reserved.