高阶函数,又称算子(运算符)或泛函,包含多于一个箭头的函数。
在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
数学
在数学中它们叫算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。
计算机科学
在无类型 lambda演算,所有函数都是高阶的;在有类型 lambda演算(大多数函数式编程语言都从中演化而来)中,高阶函数一般是那些函数型别包含多于一个箭头的函数。在函数式编程中,返回另一个函数的高阶函数被称为柯里化的函数。
在很多函数式编程语言中能找到的 map 函数是高阶函数的一个例子。它接受一个函数 f 作为参数,并返回接受一个列表并应用 f 到它的每个元素的一个函数。 [1]
-
Lustre语言作为一种同步数据流语言,在实际程序中也有控制流的需求,Lustre中控制流可以直接从两个方面体现:一是进行周期控制,针对数据流的时钟特性,每个周期处理当前周期的数据;二是通过if表达式进行条件控制.然而,在面对数组的处理时,这两个方面都无能为力.因此,在Lustre*中增加丰富的高阶运算以满足数组处理的需求.
-
Lustre*中的高阶运算包括map和fold两类算子.map运算形式为:v1,…,vk=(map op << size>>)(a1,…,an),a1到an是n个输入数组,size为数组大小;op为一个操作或一个节点node或函数function调用,其输入参数为n个数组;v1到vk为输出的数组结果,例如:arr1=(map add <<10>>)(arr2,arr3),则arr1[i]=arr2[i]+arr3[i],0≤i<10.
-
fold运算形式为acc=(fold op << size>>)(init, a1,…,an), a1~an是n个输入数组,size为数组大小,op为一个操作或一个函数调用function,其输入参数为n+1个参数:n个数组和一个**acc的初值init,**输入参数列表必须非空, acc[0]=init,acc[i+1]=op(acc[i],a1[i],…,an[i]),0≤i<size.
-
mapi运算类似于map,只是其第1个输入不是由外部输入,而是取固定的数组[v0,v1,…].
-
foldi运算类似于fold,只是其第1个输入数组为固定的数组[v0,v1,…].
-
mapfold运算相当于map运算和fold运算的一个组合,即同时进行map和fold运算.
-
mapw运算是一个条件迭代高阶运算,它的执行过程与map类似,但是当条件为false时终止执行,并记录终止时的数组索引.
-
foldw也是一个条件迭代高阶运算,其执行过程与fold类似,但是当条件为false时停止执行,停止执行时的索引值记为一个整型值.
-
mapwi运算类似于mapw只是其第1个输入不是由外部输入,而是取固定的数组[v0,v1,…].
-
foldwi类似于foldw,只是其第1个输入数组a1是取固定的[v0,v1,…].