Lambda表达式

有人可以解释我lambda表达式以及它们可以用于什么。 我用Google搜索并且有一个粗略的想法。 大多数例子都给出了c#代码。 普通老C中的lambda表达式怎么样?

实际上有两个叫做“lambda表达式”的东西,它们相关性很小:

  1. Lambda表达式是lambda演算的基本部分,与函数式编程密切相关

  2. 在命令式语言中,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上查看