ANSYS Swan 语言 forward 迭代 (三) - resume 状态保持
ANSYS Swan 相比前身 Scade 6,引入了新的迭代特性 forward。本文将描述 forward 中将当前迭代结果保留,作为下一次迭代开始时输入的特性 forward resume。
forward resume
特性使得 forward 结构的一次激活的结果,作为下一次 forward 结构激活的输入。使用用例如下描述
node forwardTest (arr: int32^5)
returns (o: int32)
{
let o = forward resume
<<5>> with [ai] = arr;
let s = last 's + ai;
returns (s : last = 0);
}
在上面的样例中,forward 体的语义为将输入数组的元素进行累加。由于resume
作用在 forward 之后,因此,在迭代结束后,s
中保存的计算结果不会被销毁,而是会会被保持。在下一次 forward 迭代激活时,上一次激活 forward 的计算结果将作为 s
在本次迭代过程中的初始值。
对上面具体的例子,输出o
跟随输入 arr
的变化可以是
step 1
arr: [1.0, 2.0, 2.0, 3.0, 5.0]
o: 13.0
step 2
arr: [1.0, 3.0, 5.0, 2.0 ,7.0]
o: 31.0
step 3
arr: [9.0, 6.0, 6.0, 2.0, 1.0]
o: 55.0
注意到,每一次 forward 激活,上一次 forward 迭代的计算结果都被保留。
这里再举一个例子,下面的例子为矩阵元素求和。
function forwardTest (mat: int32^4^3)
returns (o: int32)
{
let o = forward
<<3>> with [ai] = mat;
let sum = forward resume
<<4>> with [aij] = ai;
let s = last 's + aij;
returns (s : last = 0);
returns (sum);
}
在上面的例子中,外层 forward 对数组 mat
的第一维度遍历,在内层 forward 中,使用了 resume 特性,遍历后将保留输出的 s
的状态。如此,达到遍历数组元素求和的效果。