什么是匿名(lambda)函数?功能编程语言中匿名函数的正式定义是什么?
简单来说,当我在scheme / lisp中编程时,我会说匿名(lambda)函数是未绑定到标识符的函数。
关于lambda函数,您能说的就是这些吗?我认为可以将更多细节添加到此简单定义中。请详细说明,谢谢!
什么是匿名(lambda)函数?功能编程语言中匿名函数的正式定义是什么?
简单来说,当我在scheme / lisp中编程时,我会说匿名(lambda)函数是未绑定到标识符的函数。
关于lambda函数,您能说的就是这些吗?我认为可以将更多细节添加到此简单定义中。请详细说明,谢谢!
Answers:
这取决于您将重点放在问题的哪一部分。如果专门针对匿名函数匿名,那么实际上唯一的答案就是它们是未绑定值。如果泛泛地谈论函数,那么对于应用语言,匿名函数可能是在函数设置中使用lambda演算的最明显体现。
实际上,从lambda演算的角度来看,lambda表达式是用于创建绑定的非常语法化的构造。回忆一下lambda微积分中使用的表示法:
语言通常提供诸如let
(ML之类的语言,方案)或define
(方案)之类的方式来创建可在顶层使用的绑定(或在比函数更复杂的语法构造中使用的绑定,例如模块或对象),但这是唯一需要的工具绑定是较低级别的lambda。
如果您查看诸如Scheme或Lisp方言之类的语言,它们的根本就是lambda演算,而许多特殊形式的确是糖衣的lambda。
对于连接语言,情况略有不同。Lambda不是必需的,实际上适得其反。当所有内容都是函数时,定义匿名lambda有什么意义?
这两种方式之间存在某种双重性。后者侧重于无点函数组合,因此尝试将所有内容表示为函数,而前者则处理更复杂的演算,并努力像其他语言值一样将函数作为第一类值。在这方面,人们可以看到lambdas是这一努力的结果。
在此答案中引入了一些关于该主题的指针(效果很差):