【问题标题】:Is lambda a type of higher order function?lambda 是一种高阶函数吗?
【发布时间】:2011-02-15 03:05:51
【问题描述】:
【问题讨论】:
标签:
lambda
higher-order-functions
【解决方案1】:
HOF 的定义说应该至少接受一个或多个函数或返回一个函数适合 lambda 是什么
是吗? (lambda (x) (x+1))(或 x => x+1 或 \x -> x+1 或 fun x -> x+1,取决于您的语言语法)是一个 lambda。然而,它既不接受一个函数作为它的参数(它接受一个 int),也不返回一个。
所以不,lambda 不一定是高阶函数,尽管它们可以。
lambda 是一个匿名函数。因此,它是一个函数。但它只是一个高阶函数,如果它接受或返回一个函数,大多数 lambdas 不这样做。然而,lambdas 最常被用作高级函数的参数(即,如果你这样做,Where(s => s.Length > 5) Where 是一个高阶函数,s => s.Length > 5 是一个(一阶)lambda),所以它们是相关的。
【解决方案2】:
这取决于您所说的“lambda”是什么意思。
您链接到的维基百科页面的以下段落从类型理论的角度清楚地描述了这种关系。
“在无类型 lambda 演算中,所有函数都是高阶函数;在大多数函数式编程语言派生而来的有类型 lambda 演算中,高阶函数通常是那些类型包含多个箭头的函数。在函数式编程中,返回其他函数的高阶函数称为柯里化。”
换句话说,在类型理论方面,函数 (lambda) 在无类型 lambda 演算中始终是高阶的,而 可能 在有类型 lambda 演算中是高阶 ... 取决于它的类型签名。
如果我们谈论的是由某些编程语言实现的“lambda”结构,那么它取决于 1)您所谈论的实际语言,以及 2)特定语言中的特定用法。
在 lambda 是匿名的一等函数的语言中,您会期望它们能够能够表达高阶函数。但是高阶函数是将其他函数作为参数和/或将它们作为结果返回的函数。并不是所有在应用程序中使用“lambda”都会做到这一点。
【解决方案3】:
Lambda 语法使高阶函数的实现更容易。例如,currying 是一个通过 lambda 语法变得更容易的高阶函数。
您可能想研究 lambda 运算符以了解高阶函数。