Оператор цикла с параметром

Синтаксис
           
FOR <​инициализатор1​>{,<​инициализатор2​>}
WHILE <​выражение​> [BY <​инкремент1​>{,<​инкремент2​>}] LOOP
   <​тело цикла​>
ENDLOOP
Описание

<​инициализатор1​> и <​инициализатор2​> – операторы присвоения начальных значений параметрам цикла.

<​инкремент1​> и <​инкремент2​> – операторы изменения значений <​инициализатора1​> и <​инициализатора2​> соответственно.

<​выражение​> должно быть логического типа.

До начала цикла выполняется присвоение значений <​инициализатору1​> и, если задан, <​инициализатору2​>, после чего проверяется значение <​выражение​>. Если его значение TRUE, выполняется <​тело цикла​>, начиная с LOOP. После чего выполняется изменение параметров цикла (если задана конструкция BY …) заново вычисляется <​выражение​> и принимается решение о продолжении (прекращении) цикла. Если значение <​выражения​> FALSE, управление передается на следующий после ENDLOOP оператор.

Чтобы количество циклов было конечным, в <​теле цикла​> или в конструкции BY … обязательно должно выполняться изменение значений параметров или условий, влияющих на <​выражение​>.

Примеры
1)
for i:=1 while i<​=10 by i:=i+1 loop
  x[i]:=0;
endloop

Данная конструкция аналогична следующим:
for i:=1 while i<​=10 loop
  x[i]:=0;
  i:=i+1;
endloop;

i:=1;
while i<​=10 loop
  x[i]:=0;
  i:=i+1;
endloop;

2)
for i:=0, n:=1 while i<​8 by i:=i+1, n:=n*2 loop
endloop;