#### 16.4.7 The `LOOP` and `BREAK` Commands ¶

    LOOP [var=first TO 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.