一级函数和高级函数之间的任何区别

我想知道一级函数和高级函数是否有区别。

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

试图谷歌,但没有发现任何有用的东西。

它们是有区别的。 当你说一门语言具有一stream的function时,就意味着语言将function当作值来处理 – 你可以把一个function分配给一个variables,把它传递给另一个function。高阶function是对其他function起作用的function,意思是他们将一个或多个函数作为参数,也可以返回一个函数。

一般而言,“高阶”概念可以应用于函数,就像math意义上的函数一样。 “一stream”的概念只与编程语言的function有关。 在引用诸如“一streamfunction”之类的function时很less使用。 “一种语言有/没有一stream的function支持”更为常见。

这两个东西是密切相关的,因为很难想象一个具有一streamfunction的语言不会支持高阶函数,反之则是一个高阶函数但没有一streamfunction支持的语言。

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

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

他们不一样

一stream的function

一种统一处理的语言值被称为“头等”。 它们可以存储在数据结构中,作为parameter passing,或用于控制结构。

支持具有函数types的值的语言,将它们视为与非函数值相同,可以说是具有“头等function”。

更高阶的function

具有头等function的后果之一是你应该能够将一个函数作为parameter passing给另一个函数。 后者的function现在是“高阶”。 这是一个以函数作为参数的函数。

典型的例子是“地图”

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

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

function语言 – function是构build程序的主要手段的语言 – 都具有一stream的function。 大多数也有更高级的function(非常罕见的例外是Excel等语言,可以说是function性的,但不是更高的顺序)。

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

另一方面,你可以想象支持高阶函数的语言,但是不要使函数成为一stream的函数(并且函数的参数被特殊处理,而不同于“普通”的值参数)。

所以一类函数(作为语言特征)的存在意味着高阶函数的存在,而不是相反。