什么是Lambda?


93

有人可以很好地描述Lambda是什么吗?我们为它们添加了标签,它们位于C#问题的机密上,但是我还没有找到关于它们的含义的良好定义和解释。


1
如何维基百科的演算文章一开始?然后是Wikipedia的函数式编程文章作为后续。
Thorsten79


amda的表达方式在这里很 漂亮。
Jameer Mulani '17

Answers:


135

闭包,lambda和匿名函数不一定是同一回事。

匿名函数是没有(或至少不需要)自己名称的任何函数。

闭包是它被宣布时,可以访问其词法作用域是变量的函数,它们已经下降甚至后的范围。匿名函数不一定必须是闭包,但是它们在大多数语言中都可用,而当不是时,它们的用处就更少了。

就计算机科学而言,lambda的定义不太好。许多语言甚至不使用该术语。相反,他们只会称其为闭包或匿名函数或发明自己的术语。在LISP中,lambda只是一个匿名函数。在Python中,lambda是一个匿名函数,专门限于单个表达式。还有更多,您需要一个命名函数。Lambda是两种语言的闭包。


该术语可能旨在暗示lambda演算en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

哇,我和我有一个以上的支持者来提出这个问题。我已经看到很多技术性的术语陷入困境,但这是简洁的,并马上指出了重点。
马修·斯托帕

8
+1表示不使用术语“结束”来定义闭合,就好像使闭合更清晰了一样。
丹尼尔(Daniel)

5
由代码的结构(即按词法)定义的可以存在某些变量的区域(即作用域)。例如,在大多数语言中,函数定义词法作用域;在函数内部声明的任何变量都无法在函数外部访问。
伊夫

19

也称为闭包或匿名函数。我在这里找到了最好的描述。基本上,内联代码块可以作为参数传递给函数。



8

它只是一个声明为内联的匿名函数,通常在您不想编写完整函数时通常分配给委托。

在像lisp / scheme这样的语言中,它们通常作为函数参数被广泛地传递,但是C#中的习惯用法通常会发现lambda仅用于函数的惰性求值(如linq)或使事件处理代码更简洁。


5

在编程中并没有真正的“ lambda”之类的东西。这取决于语言等。

简而言之,通常,具有“ lambdas”的语言会将该术语用于匿名函数,或者在某些情况下使用闭包。像这样,在Ruby中:

f = lambda { return "this is a function with no name" }
puts f.call

4

对先前的回答:
-匿名函数的重要之处在于它们不需要名称。
-封闭是一个独立的概念。
-维基百科上的大量文章没有对此做得更清楚。

这是我的答案,分3部分:
1. lambda是一个函数,它也是一个表达式。这是重要的。
2.许多实现所谓的“ lambda”的语言都添加了一些语法糖,以使编写这些简短函数更加容易和快捷,但这不是必需的。
3.某些语言可能要求lambda 没有副作用。从功能上讲,这将是一个更纯粹的lambda。

当一个函数是一个表达式时,它就是语言中的“头等公民”。我可以用它来做所有重要的事情:

x = lambda(){ return "Hello World"; }

doit( 1, 2, lambda(a,b){ return a > b; }, 3 )

x = (lambda(a){ return a+1; }) + 5  // type error, not syntax error

(lambda(a,b){ print(a); log(b); })( 1, 2 )  // () is valid operator here

1

摘自维基百科:http : //en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

在诸如Lisp和Python之类的编程语言中,lambda是一种运算符,用于表示使用lambda演算后的匿名函数或闭包。


我想您是说这句话的:在Lisp和Python等编程语言中,lambda是一种运算符,用于表示使用lambda演算后的匿名函数或闭包。我已经扫描了这篇文章,但是错过了。
弗雷德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.