Scade 表达式 - 使用索引的迭代器

server/2025/1/22 10:32:27/

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)
leto = 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)
leto_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

http://www.ppmy.cn/server/160427.html

相关文章

T-SQL语言的数据库编程

T-SQL语言的数据库编程 1. 引言 在信息化迅速发展的今天&#xff0c;数据库已经成为数据管理和使用的重要工具。其中&#xff0c;T-SQL&#xff08;Transact-SQL&#xff09;作为微软SQL Server的扩展SQL语言&#xff0c;不仅用于数据查询和管理&#xff0c;还能够进行复杂的…

电脑未能成功安装设备驱动程序怎么办 几种有效修复方法

当电脑未能成功安装设备驱动程序时&#xff0c;可以尝试以下几种有效修复方法&#xff1a; 一、检查设备连接与兼容性 重新插拔设备&#xff1a;确保设备已正确且牢固地插入电脑的接口中。如果是USB设备&#xff0c;可以尝试插到主机背部的接口&#xff0c;以确保供电稳定。更…

【JVM】总结篇之GC性能优化案例

文章目录 性能优化案例1&#xff1a;调整堆大小提高服务的吞吐量初始配置优化配置 性能优化案例2&#xff1a;JVM优化之JIT优化即时编译对代码的优化逃逸分析编译器优化栈上分配同步省略标量替换 性能优化案例3&#xff1a;合理配置堆内存推荐配置如何计算老年代存活对象结论你…

# [Unity]【游戏开发】 脚本生命周期与常见事件方法

在Unity中,脚本的生命周期是指脚本从创建到销毁的整个过程,以及在此过程中触发的各类事件。掌握脚本生命周期对优化游戏开发过程和避免性能问题至关重要。本文将详细探讨脚本生命周期的关键事件、常见的事件方法,并通过实例说明如何在合适的时机执行脚本逻辑,以确保游戏的流…

软件测试丨消息管道(Kafka)测试体系

Kafka 作为一个分布式流处理平台&#xff0c;通过其强大的消息管道功能&#xff0c;实现高吞吐量、低延迟的数据流动。为了确保 Kafka 在复杂系统中的可靠性&#xff0c;建立健全的测试体系显得尤为重要。在本文中&#xff0c;我们将深入探讨 Kafka 的测试体系&#xff0c;包括…

MongoDB vs Redis:相似与区别

前言 在当今的数据库领域&#xff0c;MongoDB 和 Redis 都是备受关注的非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它们各自具有独特的优势和适用场景。本文将深入探讨 MongoDB 和 Redis 的特点&#xff0c;并详细对比它们之间的相似之处和区别&#xff0c;帮助…

【计算机网络】传输层协议TCP与UDP

传输层 传输层位于OSI七层网络模型的第四层&#xff0c;主要负责端到端通信&#xff0c;可靠性保障&#xff08;TCP&#xff09;&#xff0c;流量控制(TCP)&#xff0c;拥塞控制(TCP)&#xff0c;数据分段与分组&#xff0c;多路复用与解复用等&#xff0c;通过TCP与UDP协议实现…

初探——【Linux】程序的翻译与动静态链接

我们所写的C/C程序计算机是看不懂的&#xff0c;它只认识0101这样的机器码。所以我们就需要借助编译器对这些源代码进行翻译&#xff0c;使之成为计算机能够执行的二进制指令。这个过程通常分为几个关键步骤&#xff1a;预处理、编译、汇编和链接。 一.预处理&#xff08;Prep…