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