15

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

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

或者谁能​​进一步解释他们的关系?

4

3 回答 3

23

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

可以?(lambda (x) (x+1))(或x => x+1\x -> x+1fun x -> x+1,取决于您的语言的语法)是一个 lambda。然而,它既不接受一个函数作为它的参数(它接受一个 int),也不返回一个。

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

lambda 是一个匿名函数。因此,它是一个函数。但它只是一个高阶函数,如果它接受或返回一个函数,大多数 lambdas 不这样做。然而,lambdas 最常被用作高级函数的参数(即,如果你这样做Where(s => s.Length > 5) Where是一个高阶函数并且s => s.Length > 5是一个(一阶)lambda),所以它们是相关的。

于 2011-02-15T03:12:04.943 回答
5

这取决于你所说的“lambda”是什么意思。

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

“在无类型 lambda 演算中,所有函数都是高阶函数;在类型化 lambda 演算中,大多数函数式编程语言都派生自其中,高阶函数通常是那些类型包含多个箭头的函数。在函数式编程中,高阶函数返回其他函数的顺序函数被称为柯里化。”

换句话说,在类型理论术语中,函数 (lambda) 在无类型 lambda 演算中始终是高阶的,并且在有类型 lambda 演算中可能是高阶......取决于其类型签名。

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

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

于 2011-02-15T03:20:37.773 回答
0

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

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

于 2011-02-15T03:11:01.900 回答