Оператор WHILE
Оператор WHILE - создание действия, реализующего рекурсивный цикл.
Синтаксис
WHILE expression [ORDER [DESC] orderExpr1, ..., orderExprN]
[NEW [alias =] className]
DO action
Описание
Оператор WHILE создает действие, реализующее рекурсивный цикл. Этот оператор может добавлять свои локальные параметры при задании условия. Эти параметры соответствуют перебираемым объектам и не являются параметрами создаваемого действия. Также в блоке NEW можно указать имя класса, объект которого будет создаваться для каждого набора объектов, удовлетворяющего условию. Этому объекту задается имя, которое будет использоваться в качестве имени локального параметра, в который будет записан созданный объект.
Порядок перебора наборов объектов в операторе WHILE может быть задан блоком ORDER.
Параметры
- 
expressionВыражение, задающее условие. В этом выражении можно обращаться как к уже объявленным параметрам, так и объявлять новые локальные параметры.
 - 
DESCКлючевое слово. Указывает на обратный порядок просмотра наборов объектов.
 - 
orderExpr1, ..., orderExprKСписок выражений, определяющих порядок, в котором будут перебираться наборы объектов. Для определения порядка сначала используется значение первого выражения, затем при равенстве используется значение второго и т.д. Если список не задан, то перебор происходит в произвольном порядке.
 - 
aliasИмя локального параметра, которое будет соответствовать создаваемому объекту. Простой идентификатор.
 - 
classNameИмя класса создаваемого объекта. Задается идентификатором класса.
 - 
actionКонтекстно-зависимый оператор-действие, описывающий выполняемое действие.
 
Примеры
iterateDates (DATE dateFrom, DATE dateTo)  {
    LOCAL dateCur = DATE();
    dateCur() <- dateFrom;
    WHILE dateCur() <= dateTo DO {
        MESSAGE 'I have a date ' + dateCur();
        dateCur() <- sum(dateCur(), 1);
    }
}