什么是lambda,什么是示例实现?

什么是lambda,什么是示例实现?,lambda,Lambda,我对编程相当陌生,虽然我读了很多关于lambda的概念,但我很难弄清楚它到底是什么,以及如何实现它将使我的编程生活变得更好。首先,什么是lambda,第二,它是如何实现的 感谢所有发帖的人。正如在评论中提到的,这是一个重复,但是这里有很多很好的答案,我想为社区保留它们,所以我把它变成了一个社区帖子。以下是另一个问题的链接: Lambda是,但我认为人们可以互换使用它。看 Ruby的实现很容易理解,而且非常强大。在下面的代码times中,方法接受花括号之间的代码块,并将其回调HEIGHTtimes

我对编程相当陌生,虽然我读了很多关于lambda的概念,但我很难弄清楚它到底是什么,以及如何实现它将使我的编程生活变得更好。首先,什么是lambda,第二,它是如何实现的

感谢所有发帖的人。正如在评论中提到的,这是一个重复,但是这里有很多很好的答案,我想为社区保留它们,所以我把它变成了一个社区帖子。以下是另一个问题的链接:

Lambda是,但我认为人们可以互换使用它。看

Ruby的实现很容易理解,而且非常强大。在下面的代码
times
中,方法接受花括号之间的代码块,并将其回调
HEIGHT
times。您可以定义类似的方法来接受代码块并实现循环

@cells = []
HEIGHT.times { @cells << empty_row }

Lambda对不同的语言意味着不同的东西。我在python的上下文中了解它们,但我听说python的方法与其他语言不同

实际上,在python中,lambda是一个匿名函数,它只能由一个表达式组成,并返回其结果

我知道在其他语言中,它们是更通用的匿名函数,没有单一表达式的限制,但我不确定细节


一个匿名函数,就是它听起来的样子。没有名字的函数。例如,它们经常被用作事件处理程序,或者在任何情况下,您需要一个简单的回调函数,但不想弄乱名称空间。

lambda是函数的内联描述。它起源于函数式编程语言,支持它的其他语言的数量也在不断增加。这个名字来源于一个叫做Lambda演算的数学概念,它影响了函数式编程语言(如Lisp),lambdas的思想也源于此

你的问题取决于你所说的编程语言。例如,在F#中,您将使用
funx->x*x
来表示

int myfunction(int x) { return x * x; }
在C#中,您将使用
x=>x*x
来表示相同的函数。 它是如何使用的,以及你能用它做什么,很大程度上取决于你所使用的语言

谈到C#,它们的优点是能够将它们解析为表达式树。lambda表达式可以用作代码,如委托(大致为函数指针),也可以用作表达式树中的数据。使用它们作为表达式树,使诸如LINQ to SQL之类的库能够使用表达式创建SQL语句,以便提交到服务器并获得适当的结果。

编程世界中的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; });
变量
local\u变量
现在被捕获到闭包中,可以在闭包中使用。变量也可以通过闭包进行更新。lambda是函数式语言的基本构建块。以下是haskell的一个例子:

map (\x -> x * 2) [1, 2, 3, 4]

将与上面的C++代码相同。它使用给定函数(此处为lambda)将列表中的值映射到结果列表中。使用haskell,您可以很好地看到所使用的语法如何映射到的数学概念。

Lambda是创建匿名函数或闭包的一种方法。在命令式语言(和函数式语言)中,这相当于允许嵌套函数,其中内部函数可以访问封闭函数的局部变量和参数。它出现在函数式语言的关键字
lambda
fun
fn
甚至
\
下;在Smalltalk中,它被称为块。它也存在于大多数脚本语言中,例如Perl、Python、Lua等

关于
没有lambda的唯一语言是

  • 没有嵌套函数的语言,如标准C或Icon

  • 具有二级嵌套函数的语言——函数不能从函数返回,不能存储在全局变量中,也不能存储在堆分配的数据结构中。该语系包括帕斯卡语及其在Modula、Ada和CLU语系中的后代

Lambda对程序员和编译器编写者有着重要的意义:不再可能将所有局部变量存储在堆栈上。相反,一些变量可能被捕获并存储在堆分配的闭包中。请注意,编写lambda时,您正在编写分配

示例:最简单的函数之一是composition(Haskell语法):

这表示
compose
将两个函数
f
g
作为参数,并返回一个匿名函数,该函数将其参数
x
作为参数,然后应用
g
,然后将
f
应用于
x
compose
的应用程序在堆上创建一个闭包,该闭包存储
f
g
的值以及lambda主体的代码指针。在lambda很常见的语言中,如Haskell、ML、Caml和Scheme,人们花费了大量精力使分配盲目地快速。一些脚本语言,如Lua,有一些不同寻常的实现,使得非lambda的情况与命令式语言中的情况相同,同时也使lambda相当快。Lambda在Smalltalk中也很快,Smalltalk也是设计用来
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; });
map (\x -> x * 2) [1, 2, 3, 4]
compose f g = \x -> f (g x)
function Foo ()
{
 /* your code here */
}
/* create a list of functions */
function_list = [(lambda x : number_to_add + x) for number_to_add in range(0, 10) ]
 $("img").each(

 /* here we pass a function without any name to the "each()" method   */

 function(i){  his.src = "test"   i   ".jpg"; }

 );