如何在Ada中快速初始化含连续值序列的数组?
Ada中等间距序列数组的快速初始化方法
Ada标准库中没有像Matlab/Python里linspace那样直接的内置函数,但有几种简洁的方式实现等间距序列数组的初始化,无需每次编写专用泛型函数:
使用Ada 2012迭代聚合(推荐)
这是最简便的方式,直接在数组初始化时通过循环表达式生成每个元素。比如你需要的2,4,...,20序列:someArray : array(1..10) of Integer := (for I in 1..10 => 2 * I);若要自定义起始值、步长,只需调整表达式逻辑:
-- 起始值3,步长4,长度8的数组 anotherArray : array(1..8) of Integer := (for I in 1..8 => 3 + 4*(I-1));匿名块封装通用逻辑
如果需要更清晰地分离起始值、步长参数,可在聚合里嵌入匿名块,单次使用时不会繁琐:someArray : array(1..10) of Integer := (declare Start : constant Integer := 2; Step : constant Integer := 2; begin for I in someArray'Range => Start + Step * (I - someArray'First) end);这种写法的好处是可以直接复用数组的
'Range属性,无需手动计算索引范围。兼容旧版本Ada(2005及更早)
如果你使用的编译器不支持Ada 2012,只能手动构造聚合或者编写简单的初始化子程序,但这种场景现在已经很少见了。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

