FOR
The FOR
instruction executes a statement
block a specified number of times.
Syntax
FOR counter = start TO finish [ STEP value ]
{ statement
| EXIT FOR
| CONTINUE FOR }
[...]
END FOR
- counter is the loop counter and must be an integer variable.
- start is an integer expression used to set an initial counter value.
- finish is any valid integer expression used to specify an upper limit for counter.
- value is any valid integer expression whose value is added to counter after each iteration of the statement block.
- When the
STEP
keyword is not given, counter increments by 1. - statement is any instruction supported by the language.
- If value is less than 0, counter is decreased. In this case, start should be higher than finish.
Usage
The FOR
instruction block executes the statements up to the
END FOR
keyword a specified number of times, or until EXIT FOR
terminates the
FOR
statement. The CONTINUE FOR
instruction skips the next
statements and continues with the next iteration.
On the first iteration through the loop,
the counter is set to the initial expression at the
left of the TO
keyword. For all further iterations,
the value of the increment expression in the STEP
clause
specification (1 by default) is added to the counter
in each pass through the block of statements. When
the sign of the difference between the values of counter and the finish
expression at the right of the TO
keyword
changes, the runtime system exits from the FOR
loop.
The FOR
loop terminates after the iteration
for which the left- and right-hand expressions are
equal. Execution resumes at the statement following the
END FOR
keywords. If either expression
returns NULL
, the loop cannot
terminate, because the boolean expression "left =
right" cannot become TRUE
.
A value that
equals 0 causes an unending loop unless there is an
adequate EXIT FOR
statement.
NULL
for start, finish or
value is treated as 0. There is no way to catch this as an error. It is not
recommended to use NULL
as FOR
loop values.If statement modifies the value of counter,
you might get unexpected results at runtime. In this
case, it is recommended that you use a WHILE
loop
instead.
It is highly recommended that you ensure that statement does not modify the values of start, finish or value.
Example
MAIN
DEFINE i, i_min, i_max INTEGER
LET i_min = 1
LET i_max = 10
DISPLAY "Count from " || i_min || " to " || i_max
DISPLAY "Counting forwards..."
FOR i = i_min TO i_max
DISPLAY i
END FOR
DISPLAY "... and backwards."
FOR i = i_max TO i_min STEP -1
DISPLAY i
END FOR
END MAIN