Lustre中高阶算子的思考

高阶函数,又称算子(运算符)或泛函,包含多于一个箭头的函数。

在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

  • 接受一个或多个函数作为输入
  • 输出一个函数

数学

在数学中它们叫算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。

计算机科学
在无类型 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,…].

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值