FOR id ":=" expr1 TO expr2 [ BY stepval ] DO stmts END
Initializes id to expr1, evaluates expr1 and expr2, then executes stmts, increments id by stepval (by 1 if stepval is not specified), and loops if id <= expr2. If stepval is negative, then loops while id >= expr2.
expr1 and expr2 must both be of the same ordinal type (see section Ordinal Types). id is defined locally by the FOR loop as a READONLY variable, and its type is the type common to expr1 and expr2.
VAR i: INTEGER := 5; x: INTEGER; BEGIN FOR i := 1 TO 10 DO x := i END; (* FOR *) IO.PutInt(i); (* Puts '5', because the 'i' in the FOR loop isn't the same as this 'i' *) IO.PutInt(x); (* Puts '10' because 'x' was assigned the value of the 'i' in the FOR loop *) END
Print the letters 'A'..'E' using the CHAR ordinal type for the FOR limits:
FOR i := 'A' TO 'E' DO IO.PutChar(i) END (* 'i' is of type CHAR *)