lambda 在编程世界中意味着一个匿名函数,可以像其他所有普通变量一样传递和返回。所谓的函数式语言内置了它们,但最近有越来越多的语言支持它们,因为它们允许编写可重用的代码。看看这个例子,用下一版本的 C++ 编写:
// write this once...
int transform_values(int * values, int n, function<int(int)> f) {
for(int i = 0; i < n; i++)
values[i] = f(values[i]);
}
int values[] = { 1, 2, 3, 4 };
// ... then call it to double the values in an array
transform_values(values, 4, [](int v) { return v * 2; });
它在 C# 和其他支持 lambda 的语言中看起来确实很相似。现在有“闭”字。这意味着 lambda 可以捕获局部变量并在计算结果时使用它们:
int local_variable = 5;
int values[] = { 1, 2, 3, 4 };
// ... then call it to multiply the values in an array
transform_values(values, 4, [=](int v) { return v * local_variable; });
变量local_variable 现在被捕获在闭包内并且可以在其中使用。变量也可以通过闭包来更新。 Lambda 是函数式语言的基本构建块。这是haskell中的一个例子:
map (\x -> x * 2) [1, 2, 3, 4]
将执行与上面的 C++ 代码相同的操作。它使用给定函数(此处为 lambda)将列表中的值映射到结果列表中。使用 haskell,您可以很好地看到使用的语法如何映射到 Lambda Calculus 的数学概念。