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

Sim*_*mon 123 functional-programming terminology

我想知道第一类功能高阶功能之间是否存在差异.

我仔细阅读了这两个维基页面,看起来非常相似.如果他们谈论相同,为什么需要两个术语?

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

zou*_*oul 147

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

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

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

  • @Simon我认为避免混淆的关键是要记住一种语言要么具有一流的功能(你也可以谈论"一等"的其他东西,比如一流的类等),或者它没有.所以你永远不会谈论**特定的功能**是否是一流的.OTOH,当你说某个函数是否为高阶函数时,它只表示它是否对函数起作用,因此"高阶函数"是每个函数的一个属性.所以"具有一流功能"是一种语言的属性,"高阶"是一种功能的属性. (54认同)
  • 我认为有一件事让我很容易混淆,因为它们密切相关. (2认同)

Ash*_*eyS 61

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

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


Don*_*art 20

他们是不同的.

一流的功能

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

支持具有函数类型的值并且将它们视为与非函数值相同的语言可以说具有"第一类函数".

高阶函数

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

典型的例子是"地图"

map :: (a -> b) -> [a] -> [b]
map f []     = []
map f (x:xs) = f x : map f xs
Run Code Online (Sandbox Code Playgroud)

也就是说,它接受一个函数和一个数组,并返回一个新数组,该函数应用于每个元素.

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


And*_*erg 10

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

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

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