Product SiteDocumentation Site

A.2.2. Controlled Repetitive Loops

The controlled form specifies control1, a control variable that is assigned an initial value (the result of expri, formatted as though 0 had been added) before the first execution of the instruction list. The variable is then stepped by adding the result of exprb before the second and subsequent times that the instruction list is processed.
The instruction list is processed repeatedly as long as the end condition (determined by the result of exprt) is not met. If exprb is positive or 0, the loop is ended when control1 is greater than exprt. If negative, the loop is ended when control1 is less than exprt.
The expri, exprt, and exprb options must result in numbers. They are evaluated only once, before the loop begins and before the control variable is set to its initial value. The default value for exprb is 1. If exprt is omitted, the loop runs infinitely unless some other condition stops it.

Example A.3. Simple LOOP block with conditions

Loop I=3 to -2 by -1      /* Displays:   */
  say i                   /*      3      */
end                       /*      2      */
                          /*      1      */
                          /*      0      */
                          /*     -1      */
                          /*     -2      */

The numbers do not have to be whole numbers:

Example A.4. Simple LOOP block with conditions

I=0.3                     /* Displays:   */
Do Y=I to I+4 by 0.7      /*     0.3     */
  say Y                   /*     1.0     */
end                       /*     1.7     */
                          /*     2.4     */
                          /*     3.1     */
                          /*     3.8     */

The control variable can be altered within the loop, and this can affect the iteration of the loop. Altering the value of the control variable is not considered good programming practice, though it can be appropriate in certain circumstances.
Note that the end condition is tested at the start of each iteration (and after the control variable is stepped, on the second and subsequent iterations). Therefore, if the end condition is met immediately, the group of instructions can be skipped entirely. Note also that the control variable is referred to by name. If, for example, the compound name A.I is used for the control variable, altering I within the loop causes a change in the control variable.
The execution of a controlled loop can be limited further by a FOR phrase. In this case, you must specify exprf, and it must evaluate to a positive whole number or zero. This acts like the repetition count in a simple repetitive loop, and sets a limit to the number of iterations around the loop if no other condition stops it. Like the TO and BY expressions, it is evaluated only once--when the instruction is first processed and before the control variable receives its initial value. Like the TO condition, the FOR condition is checked at the start of each iteration.

Example A.5. Simple LOOP block with limits

Loop Y=0.3 to 4.3 by 0.7 for 3  /* Displays:    */
  say Y                         /*     0.3      */
end                             /*     1.0      */
                                /*     1.7      */

In a controlled loop, the control1 name describing the control variable can be specified on the END clause. This name must match control1 in the DO or LOOP clause in all respects except the case (note that no substitution for compound variables is carried out). Otherwise, a syntax error results. This enables the nesting of loops to be checked automatically, with minimal overhead.

Example A.6. Simple LOOP block with limits

Loop K=1 to 10
...
...
End k  /* Checks that this is the END for K loop */

Note

The NUMERIC settings can affect the successive values of the control variable because Rexx arithmetic rules apply to the computation of stepping the control variable.