对于一个没有计算机科学背景的人来说,计算机科学界的lambda是什么?


当前回答

在计算机编程中,lambda是一段代码(语句、表达式或一组代码),它从外部源获取一些参数。它不能总是一个匿名函数——我们有很多方法来实现它们。

我们在表达式、语句和函数之间有明确的区分,而数学家没有这种区分。

编程中的“函数”一词也有所不同——我们有“函数是一系列要做的步骤”(来自拉丁语“perform”)。在数学中,它是关于变量之间的相关性。

函数语言正试图尽可能地与数学公式相似,它们的单词意思几乎相同。但在其他编程语言中,我们有不同之处。

其他回答

它指的是lambda演算,这是一个只有lambda表达式的形式系统,lambda表达式表示一个函数,该函数将一个函数作为其唯一参数并返回一个函数。lambda演算中的所有函数都是这种类型的,即λ:λ→ λ.

Lisp使用lambda概念来命名其匿名函数文字。此lambda表示一个函数,它接受两个参数x和y,并返回它们的乘积:

(lambda (x y) (* x y)) 

它可以这样在线应用(计算为50):

((lambda (x y) (* x y)) 5 10)

它是一个没有名称的函数。例如,在c#中,您可以使用

numberCollection.GetMatchingItems<int>(number => number > 5);

返回大于5的数字。

number => number > 5

这里是lambda部分。它表示一个接受参数(数字)并返回布尔值(数字>5)的函数。GetMatchingItems方法对集合中的所有项使用此lambda并返回匹配项。

“lambda”这个名字只是一个历史产物。我们所谈论的只是一个表达式,其值是一个函数。

一个简单的例子(下一行使用Scala)是:

args.foreach(arg => println(arg))

其中foreach方法的参数是匿名函数的表达式。上面的一行与编写类似的代码大致相同(不是真正的代码,但你会明白的):

void printThat(Object that) {
  println(that)
}
...
args.foreach(printThat)

除了你不需要麻烦:

在其他地方声明函数(稍后重新访问代码时必须查找它)。命名你只使用一次的东西。

一旦你习惯了函数值,就不得不不使用它们,就像需要命名每个表达式一样愚蠢,比如:

int tempVar = 2 * a + b
...
println(tempVar)

而不是只在需要的地方编写表达式:

println(2 * a + b)

确切的符号因语言而异;希腊语并不总是必需的!;-)

在CS的上下文中,lambda函数是一个抽象的数学概念,它解决了数学表达式的符号求值问题。在这种情况下,lambda函数与lambda项相同。

但在编程语言中,这是不同的。这是一段被宣布为“到位”的代码,可以作为“一流公民”传递。这个概念似乎很有用,因此它几乎进入了所有流行的现代编程语言(参见lambda函数everwhere post)。

你可以把它看作一个匿名函数-这里有更多信息:Wikipedia-匿名函数