Операторы циклов
Для записи циклов используются оператор <->, который ставится между условием цикла (проверкой логического выражения) и телом цикла. Условие цикла записывается в квадратных скобках и в зависимости от взаимного расположения цикл может быть с предусловием (while) или постусловием (dowhile):
[условие while] <-> {
тело цикла while
};
{
тело цикла do while
} <-> [условие do while];
Цикл с предусловием (while) поддерживает конструкцию else, которая выполняется, если условие входа в цикл не было выполнено.
Внимание! Это поведение отличается от аналогичных конструкций в языке Python, у которого секция else выполняется всегда, кроме прерывания цикла по break.
Ветка else у оператора цикла записывается так же как и ветка иначе в условном операторе, т.е.
[ cond ] <-> {
...
},[...] --> {
...
};
Или тоже самое, но с использованием макросов из модуля dsl:
@while(cond) {
...
} @else {
... # Выполнится, только если cond будет false при входе в цикл
};
Пример реализации цикла foreach для суммирования всех элементов словаря (или одномерного тензора) с использованием оператора раскрытия списка:
summa := 0;
dict := (1,2,3,4,5,);
[ dict ] <-> { # Условие цикла, пока есть данные
# Результат оператора распаковка словаря - первый элемент перемещается в item
item, dict := ... dict;
summa += item; # Вычисление суммы всех элементов словаря
};