有人能解释我lambda表达式吗?它们可以用于什么。我用Google搜索了它&有一个粗略的想法。大多数示例都给出了c#代码。普通老C中的lambda表达式怎么样??
答案 0 :(得分:13)
实际上有两种叫做“lambda表达式”的东西,它们相关性很小:
Lambda表达式是lambda calculus的基本部分,与函数式编程密切相关
在命令式语言中,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);
答案 1 :(得分:2)
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等形式的函数。具有一等lambda函数的语言可以做到这一点。
答案 2 :(得分:1)
C不支持lamba表达式...如果你知道perl,我强烈推荐“高阶perl”这本书,它将为你提供一个熟悉的各种函数式编程技术的精彩介绍(如果你知道perl) )和实际环境。
答案 3 :(得分:-1)
在MSDN
上查看