2011-02-15 98 views
10

我在其中一个工作发布上看到了这个问题,并询问了什么是lambda函数,以及它与高阶函数的关系。我已经知道如何使用lambda函数,但不是很自信的解释,所以我做了一个小谷歌搜索,发现这个:What is a lambda (function)?和HOF的它说至少应该采取一种或多种功能或返回函数这个http://en.wikipedia.org/wiki/Higher-order_functionlambda是一种高阶函数吗?

定义适合拉姆达是什么,所以我的问题是..是拉姆达一种HOF?

还有谁可以进一步解释他们的关系?

回答

16

HOF的定义,认为至少应该采取一种或多种功能或返回一个函数符合什么了lambda

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

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

lambda是一个匿名函数。因此它是一个功能。但它只是一个高阶函数,如果它需要或返回一个函数,大多数lambda不会。然而,lambda通常用作更高级函数的参数(即,如果你的确做了Where(s => s.Length > 5)Where是一个更高阶的函数而s => s.Length > 5是(一阶)lambda),所以它们是相关的。

+0

谢谢,我想我现在明白了。 – Marconi 2011-02-15 04:27:46

0

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

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

5

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

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

“在无类型演算,所有功能都高阶;在一个有类型λ演算,从该最函数式编程语言导出,高阶函数一般是那些与含多于一个的箭头类型。在函数式编程中,返回其他函数的高阶函数被认为是curry。“

换句话说,在类型理论术语中,函数(拉姆达)总是高阶在无类型演算,并可以是在有类型λ演算高阶...根据其类型签名。

如果我们谈论的是由某些编程语言实现的“lambda”构造,那么它依赖于1)您正在谈论的实际语言,2)关于特定语言的特定用法。

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

+0

啊。我应该清楚,这方面的语言是Python。 – Marconi 2011-02-15 04:21:17