Перейти к основному содержимому
Версия: 7.0

Рекурсивный цикл (WHILE)

Оператор рекурсивного цикла аналогичен оператору обычного цикла, с той лишь разницей, что итерирование выполняется рекурсивно до того момента, пока на некотором шаге множество наборов объектов удовлетворяющих условию не станет пустым. Этот оператор не допускает альтернативного действия.

На каждом шаге условие заново вычисляется по текущему состоянию данных, подходящие наборы объектов читаются снова, и основное действие выполняется по одному разу для каждого набора из нового множества. Итерирование останавливается, когда пересчитанное множество оказывается пустым. Поскольку множество пересчитывается на каждом шаге, изменения, сделанные основным действием, — включая изменения, влияющие на само условие, — учитываются на следующем шаге. Если основное действие в итоге не исчерпывает множество, цикл выполняется без завершения.

Внутри основного действия оператор прерывания выходит из данного цикла, оператор следующей итерации переходит к следующему набору объектов в рамках текущего шага (а после последнего набора шага множество пересчитывается обычным образом), а оператор выхода пробрасывается выше, выходя из окружающего вызова действия.

Язык

Синтаксис оператора рекурсивного цикла описывается оператором WHILE.

Примеры

iterateDates (DATE dateFrom, DATE dateTo)  {
LOCAL dateCur = DATE();

dateCur() <- dateFrom;
WHILE dateCur() <= dateTo DO {
MESSAGE 'I have a date ' + dateCur();
dateCur() <- sum(dateCur(), 1);
}
}