94

有人可以很好地描述 Lambda 是什么吗?我们为它们提供了一个标签,它们在 C# 问题的秘密上,但我还没有找到一个很好的定义和解释它们是什么。

4

7 回答 7

135

闭包、lambdas 和匿名函数不一定是同一回事。

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

闭包是一个函数,它可以访问在声明时处于其词法范围内的变量,即使它们已经超出范围。匿名函数不一定必须是闭包,但它们在大多数语言中都存在,并且当它们不是时变得相当不有用。

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

于 2008-09-29T19:12:54.160 回答
19

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

于 2008-09-29T19:03:25.447 回答
18

“Lambda”指的是Lambda 演算或特定的 lambda 表达式。Lambda演算基本上是处理函数的逻辑和数学的一个分支,是函数式编程语言的基础。

~ 威廉·莱利-兰德

于 2008-09-29T19:00:49.993 回答
8

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

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

于 2008-09-29T18:59:49.107 回答
5

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

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

f = lambda { return "this is a function with no name" }
puts f.call
于 2008-09-29T19:04:17.583 回答
4

回应前面的答案:
-关于匿名函数的重要之处不是它们不需要名称。
-闭包是一个单独的概念。
- 一篇巨大的维基百科文章并没有让这一点变得更清楚。

这是我的回答分三部分:
1. lambda 是一个函数,也是一个表达式。这是重要的事情。
2. 许多实现所谓的“lambdas”的语言添加了一些语法糖以使编写这些短函数更容易和更快,但这不是必需的。
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
于 2011-08-17T07:42:19.883 回答
1

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

在 Lisp 和 Python 等编程语言中,lambda 是一个运算符,用于表示匿名函数或闭包,遵循 lambda 演算用法。

于 2008-09-29T18:59:09.513 回答