我想知道 一级函数和 高阶函数之间是否有区别。
我看了这两个维基页面,它们看起来很相似。 如果他们说的是一样的,为什么需要两个术语?
试图谷歌,但没有找到任何有用的东西。
第一类函数 是被视为对象(或可赋值给变量)的函数。
高阶函数 是以至少一个一类函数作为参数或返回至少一个一类函数的函数。
这是有区别的。当你说一种语言有一流的函数时,这意味着这种语言把函数当作值来对待——你可以把一个函数赋给一个变量,传递它等等。高阶函数是在其他函数上运行的函数,这意味着它们接受一个或多个函数作为参数,也可以返回一个函数。
“高阶”概念可以应用于一般函数,如数学意义上的函数。“一流”的概念只与编程语言中的函数有关。它很少用于指代一个函数,比如“第一类函数”。更常见的说法是“一种语言有/没有第一类函数支持”。
这两者密切相关,因为很难想象一种语言的一级函数不支持高阶函数,相反,一种语言的高阶函数却没有第一类函数支持。
他们不一样。
一级函数
语言中统一处理的值称为“第一类”。它们可以存储在数据结构中,作为参数传递,或者在控件结构中使用。
支持函数类型的值并将其视为非函数值的语言,可以说具有“第一类函数”。
高阶函数
使用第一类函数的后果之一是,您应该能够将一个函数作为参数传递给另一个函数。后一个函数现在是“高阶”函数。它是一个将函数作为参数的函数。
典型的例子是“ map”
map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs
也就是说,它接受一个函数和一个数组,并返回一个新数组,其中函数应用于每个元素。
函数式语言——函数是构建程序的主要手段的语言——都有一流的函数。大多数还有高阶函数(像 Excel 这样的语言是非常罕见的例外,可以说它是函数式的,但不是高阶函数)。
除了前面的答案之外,请注意,具有一级函数的语言会自动启用高阶函数的表达式(因为您可以像传递任何其他值一样将函数作为参数传递)。
另一方面,您可以想象支持高阶函数但不使函数成为一级函数的语言(而且作为函数的参数受到特殊处理,与“普通”值参数不同)。
因此,一级函数(作为一种语言特性)的存在意味着高阶函数的存在,而不是相反。
第一类函数意味着您可以对其他类型(变量、布尔值、数字... ...)进行的所有操作,您可以对函数进行操作。
例如,将它们分配给变量,传递它,动态创建它们。
第一类 函数可以:
High Order Function 是返回另一个函数的函数。
例如:
function highOrderFunc() { return function () { alert('hello'); }; }
当我们把函数作为第一类函数的参数传递时。 使用函数作为值的能力称为一级函数。
var a = function(parameter){ return function(){ } } console.log(a())
接收另一个函数作为参数或返回新函数或两者兼而有之的函数称为高阶函数。高阶函数只有在第一类函数的作用下才有可能。