Lambda表达式

时间:2010-04-22 21:45:18

标签: c lambda

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

4 个答案:

答案 0 :(得分:13)

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

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

  2. 在命令式语言中,lambda表达式通常是匿名方法的同义词。例如,在C#中,您可以将lambda表达式(即表达式本身,而不仅仅是其结果)作为参数传递:

  3. 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

上查看