Scade 表达式 - 使用索引的迭代器
Scade 表达式中的 map, fold, mapfold,会对输入数组参数中的元素逐个作处理,不需要数组元素的索引信息。若在处理数组元素时,需要数组元素相应的索引信息,则可使用迭代器算子 mapi
, foldi
, mapfoldi
。
mapi 算子
mapi 算子的行为与 map 相似,都会对输入数组的所有元素进行处理,并输出新的数组。mapi 的语法定义为
(mapi operator <<expr>>) (list)
mapi 与 map 的不同点在于,对 operator
算子,输入参数列表的首项参数需为整数类型。在 mapi 执行时,输入的值为当前周期处理的元素对应的索引值。
例子
在下面的例子中 mapi 表达式 (mapi subOp <<10>>)(i1, i2)
内处理数组元素的算子为 subOp。可以注意到,subOp 的函数签名中,首项输入参数 index
的含义为当前周期处理的元素对应的索引值。
function mapiOp(i1,i2: int8 ^10) returns (o: int8 ^10)
o = (mapi subOp <<10>>)(i1, i2);
function #pragma kcg expand #end subOp(index: int8; i1,i2: int8) returns (o: int8)
let
o = if (index mod 2 = 0)
then
(i1 + i2)
else
(i1 - i2)
;
tel
foldi 算子
foldi 算子的作用与 fold 相似。不同点在于对输入数组的元素进行处理时,会提供元素相应的索引信息。
foldi 的语法定义如下
(foldi operator <<expr>>) (list)
其中 operator
算子的输入参数列表中的第一项参数需为整型。在运行期间的语义中,该项参数指示当前周期处理的数组元素的索引。
例子
在以下例程中,foldi 表达式 (foldi subOp <<3>>)(0, i1, i2)
中,subOp
的输入参数列表中,首项参数index
为当前周期处理元素的索引。
function foldiOp(i1,i2: int8 ^3) returns (o: int8)
o = (foldi subOp <<3>>)(0, i1, i2);
function #pragma kcg expand #end
subOp(index: int8; acc: int8; elem1,elem2: int8)
returns (o: int8)
o = if (index mod 2 = 0) then (acc + elem1 + elem2) else (acc);
mapfoldi 算子
mapfoldi 算子的效果同 mapfold 类似,可同时提供 map 的效果与 fold 的效果。mapfoldi 与 mapfold 的不同点在于,在处理数组元素时,mapfoldi 将提供输入数组元素对应的索引信息。
mapfoldi 的语法定义如下
(mapfoldi [[INTEGER]] operator <<expr>>)(list)
例子
在以下例程中,对 mapfoldi 表达式 (mapfoldi 2 subOp <<10>>)(0, 0, i1, i2)
,算子subOp
的输入参数的首项参数 idx
为当前周期处理元素在输入数组中的索引。
function mapfoldiOp(i1,i2: float32 ^10)
returns (o_acc1, o_acc2: float32; o_arr1, o_arr2: float32 ^10)
o_acc1, o_acc2, o_arr1, o_arr2 = (mapfoldi 2 subOp <<10>>)(0, 0, i1, i2);
function
#pragma kcg expand #end
subOp(idx: int8; acc1,acc2: float32; i1,i2: float32)
returns (o_acc1, o_acc2, o1, o2: float32)
let
o_acc1 = if (idx mod 2 = 0) then (acc1 + i1 + i2) else acc1;
o_acc2 = if (idx mod 2 <> 0) then (acc2 + i1 - i2) else acc2;
o1 = if (idx mod 2 = 0) then i1 else i2;
o2 = if (idx mod 2 = 0) then i2 else i1;
tel
原文地址:https://blog.csdn.net/mozart_cai/article/details/145268736
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!