ANSYS Swan 语言 forward 迭代(一) - 数组与矩阵遍历

ANSYS Swan 语言相比前身 Scade 6 新引入的特性中,forward 迭代是主要的新特性之一。本篇材料主要描述 forward 迭代用于数组与矩阵的遍历。

forward 对数组进行遍历

forward 可用于遍历数组对数据作处理,比如在下面的例子中,使用 forward遍历一维数组,并对遍历的每个元素进行算术计算,输出为经过计算处理的新数组。

swan 复制代码
function forwardTest (arr1: int32^5; c: int32)
returns (B: int32^5)
{
let B = forward <<5>> with [ai] = arr1;
     let bi = ai * c; 
    returns ([bi]);
}

在上述 forward 迭代表达式中,<<5>> 表示遍历长度为 5,[ai] = arr1 表示数组 arr1 中每个元素在 forward 体中表示为 ai。在 returns 语句中,[bi] 表示输出为每次迭代计算后的新元素组成的数组流。

forward 表达式的输出也可以不是更新后的数组,而是累计计算后的结果。比如下面的例子。

swan 复制代码
function forwardTest (in_arr: int32^3)
returns (sum: int32)
{
let sum = forward <<3>> with [ai] = in_arr;
            let s = last 's + ai;
          returns (s: last = 0);
}

在上面的例子中,forward 计算结果 s 为输入数组的元素之和。

forward 表达式的索引和输入声明部分中,也可以描述数组的索引。比如下面的例子中,

swan 复制代码
function forwardTest (in_arr: int32^3)
returns (sum: int32)
{
let sum = forward <<3>> with <<i>> 
            let s = last 's + in_arr[i];
          returns (s: last = 0);
}

上面例子 forward 中索引与输入声明 <<3>> with <<i>> 中的 i 表示输入数组的索引。在 forward 体中, in_arr[i] 引用第 i 项数组元素。

forward 迭代的输入可以是多个数组表达式。比如在下面的例子中,输入为两项数组。其中,第二项数组in_arr2 经过了 reverse 数组表达式的处理。

swan 复制代码
function forwardTest (in_arr1: int32^3; in_arr2: int32^3)
returns (o: int32^3)
{
let o = forward <<3>> with [ai] = in_arr1; [bi] = reverse(in_arr2);
        let oi = ai + bi;
        returns ([oi]);
}

在上面的例子中,[ai] = in_arr1; [bi] = reverse(in_arr2); 表示 forward 对两项输入数组进行迭代,其中,第二项输入数组经过了 reverse 表达式操作。

forward 对矩阵进行遍历

forward 迭代支持对矩阵进行遍历。比如下面的例子是对矩阵进行求和。

swan 复制代码
function forwardTest (mat: int32^3^2)
returns (sum: int32)
{
let sum = forward 
            <<2>> with <<i>> 
            <<3>> with <<j>>   
            let s = mat[i][j] + last 's;
            returns (s : last = 0);
}

在上面的例子中,<<2>> with <<i>>, <<3>> with <<j>> 表示输入矩阵的两个维度。通过 mat[i][j] 索引矩阵元素。

对上面的例子,forward 声明部分也可以使用下面例子中的表达

swan 复制代码
function forwardTest (mat: int32^3^2)
returns (sum: int32)
{
let sum = forward <<2>> <<3>> with [[aij]] = mat;
            let s = last 's + aij;
            returns (s : last = 0);
}

在上面的例子中,[[aij]] 表示矩阵中的元素。在 forward 体中,aij 表示矩阵中的元素。

相关推荐
fdtsaid8 天前
Lustre 语言的 Rust 生成相关的工作
rust·lustre
fdtsaid2 个月前
Heptagon 迭代器
lustre·scade·heptagon
经纬恒润1 年前
SCADE—产品级安全关键系统的MBD开发套件
scade
碧蓝幻想1 年前
Unbuntu20.4编译安装lustre客户端
linux·运维·lustre