Scade 表达式 - 迭代器

embedded/2025/1/22 8:16:32/

Scade 表达式支持的算子中,有一类算子被称为高阶(Higher-Order)算子。其中高阶的含义为此类算子的输入参数的类型,为用户定义的算子或原生的算子。迭代器算子是高阶算子的一种,在 Scade 中,迭代器类型算子包括: map, fold, mapfold

map 算子

map 算子以数个数组序列、操作数组元素的算子作为输入参数。其执行效果为对输入数组的元素进行处理,生成输出数组中对应位置的值。

map 算子的语法定义如下

(map operator << expr >>) (list)

其中,operator 为作为输入参数的算子,该算子对输入数组的各元素进行处理。expr 指示迭代次数。list 为输入数组列表。

例子

在以下例程中,map 迭代器输入有两项输入数组,mult_scalar 对数组中各元素作处理,输出一项数组。

function mult_scalar(a,b: int32) returns (c: int32)c = a * b;function mapOp(x: int32; t: int32^3) returns (u: int32^3)
letu = (map mult_scalar <<3>>)(x^3, t);
tel

fold 算子

fold 算子对数组中的各元素进行累计处理,计算得出值。

fold 算子的语法定义形式如

(fold operator << expr >>) (list)

其中,operator 为对数组各元素进行累计计算处理的算子。expr 指代迭代次数。list 为输入参数,其中首项参数,为指代累计初始值。

例子

在下面的例程中,fold 处理长度为 9 的数组参数。值 arr1[0] 为累计计算的初始值,处理的数组为 arr1[1 .. 9]。每次迭代计算,addOp 中的a, b参数分别为累计值、arr1[1 .. 9] 中的元素值。

function foldOp(arr1: int8^10) returns (ival: int8)ival = (fold addOp <<9>>) (arr1[0], arr1[1 .. 9]);function addOp(a, b: int8) returns (c: int8)c = a + b;

mapfold 算子

mapfold 算子在效果上类似 map 算子与 fold 算子的集合。其既可包含 fold 算子的效果,也可包含 map 算子的效果。

mapfold 的语法定义如下

(mapfold [[INTEGER]] operator <<expr>>) (list)

其中,INTEGER 指示在输入参数 list 中,靠前 INTEGER 数量的参数为累计变量;operator 为处理数组输入参数的算子;expr 指示迭代操作次数。list为输入参数列表。在数据参数列表中,前 INTEGER 项为用于 fold 计算效果的累计初始值。

例子

在以下例子中,在(mapfold 2 subOp <<10>>) (0, 0, i1, i2)中,2 指示在输入参数列表中,前两项 0, 0 指代累计器变量。算子 subOp 包含对输入数组参数i1, i2 的 fold 处理与 map 处理。在本例中,处理后返回2项累积计算结果 oaac1, oaac2 与 输出数组 oarr1, oarr2。

function mapfoldOp(i1,i2: int8 ^10)
returns (oacc1, oacc2: int8; oarr1, oarr2: int8 ^10)oacc1, oacc2, oarr1, oarr2 = (mapfold 2 subOp <<10>>)(0, 0, i1, i2);function
#pragma kcg expand #end
subOp(i_acc1, i_acc2, i1, i2: int8) returns (o_acc1, o_acc2, o1, o2: int8)
leto_acc1 = i_acc1 + i1 + i2;o_acc2 = i_acc2 + i1 - i2;o1 = i1 + i2;o2 = i1 - i2;
tel

http://www.ppmy.cn/embedded/156009.html

相关文章

(10)深入浅出智能合约OpenZeppelin开源框架

OpenZeppelin 是一个用于构建安全智能合约的开源框架&#xff0c;提供了经过严格审计的 Solidity 库和工具。它是以太坊生态系统中最流行的开发工具之一&#xff0c;广泛应用于 DeFi、NFT、DAO 等项目。OpenZeppelin 的核心目标是帮助开发者编写安全、可升级和高效的智能合约。…

Whisper-GPT:混合表征音频大语言模型

Whisper-GPT:混合表征音频大语言模型 当下,利用从神经压缩算法(例如#Encodec#​)派生的离散音频标记的生成式音频、语音以及音乐模型数量激增。然而,这种方法的主要缺陷之一在于对上下文长度的处理。如果必须考虑所有不同频率的音频内容才能进行下一个标记预测,那么高保…

|Python新手小白中级教程|第三十章:日期与时间(入门)

文章目录 前言一、日期与时间的基本概念二、时间戳1.概念2.形成过程 三、Python的时间格式化符号四、时间元组1.时间元组&#xff1a;2.struct_time元组的属性 五、time库可以干什么总结 前言 大家好呀&#xff0c;BOBO仔回来啦。 说实话&#xff0c;这几天我们学习面向对象的…

Excel 面试 05 查找函数组合 INDEX-MATCH

Excel 的 INDEX-MATCH 是一种强大的函数组合&#xff0c;用于查找和返回表格中的值。相比于传统的 VLOOKUP 或 HLOOKUP&#xff0c;它更灵活且高效&#xff0c;尤其在需要双向查找或处理动态列时表现出色。 INDEX-MATCH 基本原理 INDEX 函数&#xff1a;返回数组中指定位置的值…

CentOS 7 下安装RabbitMQ教程_centos启动rabbitmq

CentOS 7 下安装RabbitMQ教程 一、做准备&#xff08;VMWare 虚拟机上的 CentOS 7 镜像 上安装的&#xff09; &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;rabbitmq-server-3.8.5-1.el7.noarch&#xff09;下载地址mq &#xff08;2&#xff09;还得准备erl…

如何使用ideal建立一个web工程

1.新建项目(较为简单,方法不限) 2.演示建立: 3.找到项目结构 4.选择模块 5.点击加号,再点web 6.点确定 7. 8.可选择添加HTML文件(注意这里是最外层) 9.稍为修改 10.选择本机已有的浏览器运行 11.一个超基础的就示例就完成啦

【云岚到家】-day02-我的地址簿(实战)

【云岚到家】-day02-我的地址簿(实战) 1.用户端定位 1.1 需求分析 本项目在用户端和服务端都有定位的需求&#xff0c;本节分析用户端即小程序端的定位需求 1.1.1 用户端首页定位 用户端在小程序认证通过后会自动进行定位&#xff0c;也可以在首页手动定位&#xff0c;定位成…

Mac苹果电脑 怎么用word文档和Excel表格?

以下是详细步骤&#xff0c;帮助你在 MacBook 上安装和使用 Word 和 Excel&#xff1a; 安装 Microsoft Office 你可以通过以下几种方式在 MacBook 上安装 Word 和 Excel&#xff1a; 方法一&#xff1a;应用安装 pan.baidu.com/s/1EO2uefLPoeqboi69gIeZZg?pwdi2xk 方法二…