第一类功能和高阶功能之间的任何区别

时间:2012-04-13 12:47:50

标签: functional-programming terminology

我想知道First Class FunctionHigh Order Function之间是否存在差异。

我通读了这两个维基页面,看起来很相似。   如果他们谈论相同,为什么需要两个术语?

尝试谷歌但没有找到任何有用的东西。

7 个答案:

答案 0 :(得分:138)

有区别。当你说一种语言具有一流的功能时,就意味着该语言将函数视为值 - 你可以将一个函数赋值给一个变量,传递它等等。高阶函数是对其他函数有效的函数,意思是他们将一个或多个函数作为参数,也可以返回一个函数。

“高阶”概念通常可以应用于函数,就像数学意义上的函数一样。 “一流”概念仅与编程语言中的功能有关。在引用函数时很少使用它,例如“一流的函数”。更常见的是“一种语言具有/没有一流的功能支持”。

这两件事是密切相关的,因为很难想象一种具有一流功能但不支持高阶函数的语言,相反,它是一种具有高阶函数但没有一流函数支持的语言。 / p>

答案 1 :(得分:57)

第一类函数是被视为对象的函数(或可赋值给变量)。

高阶函数是至少将一个第一类函数作为参数的函数。

答案 2 :(得分:20)

他们是不同的。

头等功能

在整个统一处理的语言中的值称为“第一类”。它们可以存储在数据结构中,作为参数传递,或者在控制结构中使用。

支持函数类型值的语言,并将它们视为与非函数值相同的语言,可以说具有“第一类函数”。

高阶函数

拥有第一类函数的一个后果是,您应该能够将函数作为参数传递给另一个函数。后一种功能现在是“更高阶”。它是一个将函数作为参数的函数。

规范的例子是“地图”

map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs

也就是说,它需要一个函数和一个数组,并返回一个新数组,并将该函数应用于每个元素。

功能语言 - 功能是构建程序的主要手段的语言 - 都具有一流的功能。大多数也有更高阶的功能(非常罕见的例外是像Excel这样的语言,可以说是功能性的,但不是更高阶的。)

答案 3 :(得分:9)

除了之前的答案,请注意具有第一类函数的语言会自动启用高阶函数的表达式(因为您可以将函数作为参数传递,就像任何其他值一样)。

另一方面,您可以想象支持高阶函数的语言,但不要将函数设置为第一类(并且函数的参数是专门处理的,并且与“普通”值参数不同)。

因此,第一类函数(作为语言特征)的存在意味着存在高阶函数,但不是相反。

答案 4 :(得分:0)

第一类函数意味着您可以使用其他类型(变量,布尔值,数字......)执行的所有操作,您可以使用函数执行此操作。

例如,将它们分配给变量,传递它,在飞行中创建它们。

答案 5 :(得分:0)

头等舱功能可以:

  • 存储在变量中
  • 从函数返回。
  • 作为参数传递给另一个函数。

高阶函数是返回另一个函数的函数。

例如:

function highOrderFunc() {
  return function () {
    alert('hello');
  };
}

答案 6 :(得分:0)

一级函数:

当我们将函数作为另一个称为一等函数的函数的参数传递时。 将函数用作值的能力,称为一等函数。

var a = function(parameter){
    return function(){
    }
}
console.log(a())

高阶函数:

接收另一个函数作为参数或返回新函数或两者兼有的函数称为高阶函数。高阶函数只有在 First-class 函数的作用下才有可能。