我想知道First Class Function和High Order Function之间是否有什么区别。
我通读了这两个Wiki页面,它们看起来很相似。如果他们谈论相同的话,为什么需要两个术语呢?
尝试过谷歌,但没有发现任何有用的东西。
我想知道First Class Function和High Order Function之间是否有什么区别。
我通读了这两个Wiki页面,它们看起来很相似。如果他们谈论相同的话,为什么需要两个术语呢?
尝试过谷歌,但没有发现任何有用的东西。
Answers:
它们是有区别的。当您说一种语言具有一流的功能时,这意味着该语言将功能视为值–您可以将一个功能分配给一个变量,将其传递给其他变量。高阶函数是在其他函数上起作用的函数,这意味着他们将一个或多个函数作为参数,也可以返回一个函数。
通常,“高阶”概念可以应用于函数,例如数学意义上的函数。“一流”的概念仅与编程语言中的功能有关。在引用诸如“一流功能”之类的功能时,很少使用它。说“一种语言具有/没有一流的功能支持”更为常见。
这两件事是紧密相关的,因为很难想象具有一流功能的语言也不支持高阶函数,相反,也有没有高级功能但不具有一流函数支持的语言。
int
或)逊色。char
他们不同。
一流的功能
在整个语言中统一处理的值称为“一流”。它们可以存储在数据结构中,可以作为参数传递,也可以在控制结构中使用。
支持功能类型的值并将其与非功能值相同的语言可以说是“一流的功能”。
高阶函数
具有一流函数的后果之一是,您应该能够将一个函数作为参数传递给另一个函数。后者的功能现在是“高阶”。它是一个以函数为参数的函数。
典型的例子是“地图”
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
也就是说,它需要一个函数和一个数组,并返回一个将函数应用到每个元素的新数组。
功能语言-功能是构建程序的主要手段的语言-都具有一流的功能。大多数还具有高阶函数(极少数例外是像Excel这样的语言,可以说是功能性的,但不是高阶)。
除了前面的答案,请注意,具有一流功能的语言会自动启用高阶函数的表达(因为您可以像其他任何值一样将函数作为参数传递)。
另一方面,您可以想象支持高阶函数但不使函数成为一流的语言(并且对作为函数的参数进行特殊对待,并且不同于“普通”值参数)。
因此,一等函数(作为语言功能)的存在暗示着高阶函数的存在,反之则不然。
一流的函数意味着您可以使用其他类型(变量,布尔值,数字...)进行的所有操作,您可以使用函数来进行处理。
例如,将它们分配给变量,将其传递,然后快速创建它们。