"Анри Бертьен. Стандартный набор операторов языка REXX (для OS/2) " - читать интересную книгу автора

раз.

Например:

/* Выведет на экран "Ура!" три раза: */
Do 3;
Say 'Ура!';
End;

Заметим, что если первой лексемой после DO является имя переменной, а
второй - знак равенства ("="), то считается, что имеет место цикл с
управляющей переменной (здесь действует то же правило, которое используется
для отличия команд системы от оператора присваивания). Поэтому, если Ваше
выражение для простого счётчика начинается именно так - возьмите его, по
крайней мере, в скобки...

Циклы с управляющей переменной.

Данная форма определяет управляющую переменную <имя>, которой
присваивается начальное значение (результат вычисления <выражения 'FROM'>),
а затем, всякий раз при выполнении указанной группы операторов, эта
переменная будет изменяться на шаг (путём прибавления результата <выражения
'BY'> в момент выполнения оператора END в конце цикла). Группа операторов
будет повторно выполняться до тех пор, пока будет удовлетворяться условие
окончания (определённое результатом вычисления выражения <выраж. 'TO'>).
Если <выраж. 'BY'> положительно, то цикл будет заканчиваться, когда <имя>
станет больше, чем <выраж. 'TO'>. Если же <выраж. 'BY'> отрицательно, то
цикл будет заканчиваться, когда <имя> станет меньше, чем <выраж. 'TO'>.
Результатом вычисления <выражения 'FROM'>, <выражения 'TO'> и
<выражения 'BY'> должны быть числа (не обязательно целые или положительные).
Эти выражения вычисляются только один раз до начала цикла и до того, как
управляющая переменная будет установлена в своё начальное значение.
Значением <выражения 'BY'> по умолчанию будет 1. Если <выражение 'TO'>
отсутствует, то цикл будет выполняться сколь угодно большое число раз, пока
какое-то другое условие или событие не прекратит его выполнение.

Например:

/* Выведет на экран: */
Do k=9 to -9 by -4; /* 9 */
Say k; /* 5 */
End; /* 1 */
/* -3 */
/* -7 */

Ещё пример (для не целых чисел):

/* Выведет на экран: */
X=0.01; /* 0.01 */
Do y=x to x/0.2 by 0.02; /* 0.03 */