Например, если я хочу инициализировать массив элементов следующим образом:
someArray : array(1..10) of Integer := (2,4,6,8,10,12,14,16,18,20);
Есть ли короткий способ или какой-то механизм, чтобы сделать это быстрее?
Например, в Matlab и python есть функция linspace
, которая возвращает последовательность чисел, расположенных через равные промежутки. Есть ли аналогичная функциональность для Ады, которая работает для любого типа массива любой длины?
Я могу создать общую функцию для этого, но это потребует отдельной инициализации для каждого отдельного типа массива, и это кажется немного громоздким для функции, которая по существу будет использоваться один раз для каждого типа массива.
echo {2..20..2} | sed "s/ /,/g"
, скопируйте и вставьте вывод
Ада 2022 (например, GCC 12 с -gnat2022
) позволяет
package Aggregates is
type A is array (Integer range <>) of Integer;
V : A := (for J in 1 .. 10 => J * 2);
end Aggregates;
См. также Ассоциация повторяющихся компонентов.
Я хотел бы указать, что, когда в документе по этой ссылке говорится, что использование агрегатов массива с круглыми скобками устарело, это позиция AdaCore, не оправданная ARM (т. Е. Это не в Приложении J). Это очень раздражает всех, кто пытается разрабатывать для людей, которые не могут использовать последний компилятор (/rant).
Приятно, что эта функция наконец-то появилась! Немного разочаровывает, что для такой базовой (на мой взгляд) функции потребовалось так много времени...
В эти дни я рассматриваю генерацию кода для такого рода проблем. Или даже настолько тупой, как заклинание команды оболочки, генерирующее строку, задокументированную соответствующим образом.