Lambda表达式
有人可以解释我lambda表达式以及它们可以用于什么。 我用Google搜索并且有一个粗略的想法。 大多数例子都给出了c#代码。 普通老C中的lambda表达式怎么样?
实际上有两个叫做“lambda表达式”的东西,它们相关性很小:
-
Lambda表达式是lambda演算的基本部分,与函数式编程密切相关
-
在命令式语言中,lambda表达式通常是匿名方法的同义词。 例如,在C#中,您可以将lambda表达式(即表达式本身,而不仅仅是其结果)作为参数传递:
C#:
someCollection.Apply (x => 2*x); // apply expression to every object in collection // equivalent to someCollection.Apply (delegate (int x) { return 2 * X; });
话虽如此,C不支持匿名方法。 但是,您可以使用函数指针来实现类似的结果:
int multiply (int x) { return 2 * x; } ... collection_apply (some_collection, multiply);
el.pescado的答案是正确的,但他提供的示例使用函数指针可以轻松解决。 使用c函数指针无法解决lambda函数的许多用法。
假设您在c中编写这些函数:
int Multiply_1(int x) { return(x*1); } int Multiply_2(int x) { return(x*2); } int Multiply_3(int x) { return(x*3); } int Multiply_4(int x) { return(x*4); } etcetera, to infinity
这些都很容易理解。 现在假设您要编写一个函数,该函数将y作为输入并返回指向函数Multiply_y()的指针:
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
其中“Multiply_y”是动态创建的Multiply_1,Multiply_2等forms的函数。具有一等lambda函数的语言可以做到这一点。
C不支持lamba表达式…如果你知道perl,我强烈推荐“高阶perl”这本书,它将为你提供熟悉的(如果你知道的perl)和实用的各种函数式编程技术的精彩介绍。设置。
在MSDN上查看