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

Синтаксис
           
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;