LOOP
and BREAK
Commands ¶LOOP
[var=
firstTO
last [BY
step]] [IF
expression].
...matrix commands...END LOOP
[IF
expression].
BREAK
.
The LOOP
command executes a nested group of matrix commands,
called the loop’s body, repeatedly. It has three optional
clauses that control how many times the loop body executes.
Regardless of these clauses, the global MXLOOPS
setting, which
defaults to 40, also limits the number of iterations of a loop. To
iterate more times, raise the maximum with SET MXLOOPS
outside
of the MATRIX
command (see SET MXLOOPS).
The optional index clause causes var to be assigned successive values on each trip through the loop: first first, then first + step, then first + 2 × step, and so on. The loop ends when var > last, for positive step, or var < last, for negative step. If step is not specified, it defaults to 1. All the index clause expressions must evaluate to scalars, and non-integers are rounded toward zero. If step evaluates as zero (or rounds to zero), then the loop body never executes.
The optional IF
on LOOP
is evaluated before each
iteration through the loop body. If its expression, which must
evaluate to a scalar, is zero or negative, then the loop terminates
without executing the loop body.
The optional IF
on END LOOP
is evaluated after each
iteration through the loop body. If its expression, which must
evaluate to a scalar, is zero or negative, then the loop terminates.
The following computes and prints l(n), whose value is the number of steps in the Juggler sequence for n, for n from 2 to 10 inclusive:
COMPUTE l = {}. LOOP n = 2 TO 10. COMPUTE a = n. LOOP i = 1 TO 100. DO IF MOD(a, 2) = 0. COMPUTE a = TRUNC(a &** (1/2)). ELSE. COMPUTE a = TRUNC(a &** (3/2)). END IF. END LOOP IF a = 1. COMPUTE l = {l; i}. END LOOP. PRINT l.