lambda是一种高阶函数吗?

时间:2011-02-15 03:05:51

标签: lambda higher-order-functions

我在其中一个职位发布中看到了这个问题,并且询问了什么是lambda函数以及它与高阶函数的关系。我已经知道如何使用lambda函数,但不太自信地解释它,所以我做了一些谷歌搜索,发现了这个:What is a lambda (function)?和这个http://en.wikipedia.org/wiki/Higher-order_function

HOF的定义说至少应该采用一个或多个函数或返回一个函数,这适合于lambda是什么,所以我的问题是......是一个lambda是一种HOF吗?

还是能够进一步解释他们之间关系的人?

3 个答案:

答案 0 :(得分:18)

  

HOF的定义说至少应该采用一个或多个函数或返回一个函数,这适用于lambda是什么

是吗? (lambda (x) (x+1))(或x => x+1\x -> x+1fun x -> x+1,取决于您的语言的语法)是一个lambda。但是它既不需要函数作为参数(它需要一个int),也不会返回一个函数。

所以不,lambda不一定是高阶函数,尽管它们可以是。

lambda是一个匿名函数。因此它是一种功能。但它只是一个高阶函数,如果它接受或返回一个函数,大多数lambdas都没有。但是lambdas最常被用作更高函数的参数(例如,Where(s => s.Length > 5) Where是高阶函数而s => s.Length > 5是(一阶)lambda),所以是相关的。

答案 1 :(得分:5)

这取决于你对“lambda”的意思。

您链接到的维基百科页面中的以下段落从类型理论的角度清楚地描述了这种关系。

  

“在无类型的lambda演算中,所有函数都是高阶的;在输入大多数函数式编程语言的类型化的lambda演算中,高阶函数通常是那些类型包含多个箭头的函数。在函数式编程中,返回其他函数的高阶函数被认为是咖喱。“

换句话说,在类型理论术语中,函数(lambda)在无类型lambda演算中总是高阶,而可能在类型化的lambda演算中是高阶...取决于它的类型签名。

如果我们谈论的是某些编程语言实现的“lambda”结构,那么它取决于1)你所谈论的实际语言,以及2)特定语言中的特定用法。

在lambda是匿名的第一类函数的语言中,你会期望它们能够表达高阶函数。但是高阶函数是一个函数,它将其他函数作为参数和/或将它们作为结果返回。并非所有在应用程序中使用“lambda”都会这样做。

答案 2 :(得分:0)

Lambda语法使更高阶函数的实现更容易。例如,currying是一种通过lambda语法更容易实现的高阶函数。

您可能想学习lambda 运算符以了解高阶函数。