Button for 1977 Button for 1984 Button for 1990 Button for 1995 Button for MDC Button for notes Button for examples

FOR

1984 Version of ANSI Standard

3.6.5 FOR

F[OR] Space lvn = forparameter

    forparameter::=


expr1
numexpr1 : numexpr2 : numexpr3
numexpr1 : numexpr2



The "scope" of this FOR command begins at the next command following this FOR on the same line and ends just prior to the eol on this line.

FOR specifies repeated execution of its scope for different values of the local variable lvn, under successive control of the forparameters, from left to right. Any expressions occurring in lvn, such as might occur in subscripts or indirection, are evaluated once per execution of the FOR, prior to the first execution of any forparameter.

For each forparameter, control of the execution of the scope is specified as follows. (Note that A, B, and C are hidden temporaries.)

  1. If the forparameter is of the form expr1.
    1. Set lvn = expr1.
    2. Execute the scope once.
    3. Processing of this forparameter is complete.
  2. If the forparameter is of the form numexpr1 : numexpr2 : numexpr3 and numexpr2 is nonnegative.
    1. Set A = numexpr1.
    2. Set B = numexpr2.
    3. Set C =numexpr3.
    4. Set lvn = A.
    5. If lvn > C, processing of this forparameter is complete.
    6. Execute the scope once; an undefined value for lvn is erroneous.
    7. If lvn > C-B, processing of this forparameter is complete.
    8. Otherwise, set lvn = lvn + B.
    9. Go to 6.
  3. If the forparameter is of the form numexpr1 : numexpr2 : numexpr3 and numexpr2 is negative.
    1. Set A = numexpr1.
    2. Set B = numexpr2.
    3. Set C = numexpr3.
    4. Set lvn = A.
    5. If lvn < C, processing of this forparameter is complete.
    6. Execute the scope once; an undefined value for lvn is erroneous.
    7. If lvn < C-B, processing of this forparameter is complete.
    8. Otherwise, set lvn = lvn + B.
    9. Go to 6.
  4. If the forparameter is of the form numexpr1 : numexpr2.
    1. Set A = numexpr1.
    2. Set B = numexpr2.
    3. Set lvn = A.
    4. Execute the scope once; an undefined value for lvn is erroneous.
    5. Set lvn = lvn + B.
    6. Go to 4.

Note that form d. specifies an endless loop. Termination of this loop must occur by execution of a QUIT or GOTO within the scope of the FOR. These two termination methods are available within the scope of a FOR independent of the form of forparameter currently in control of the execution of the scope; they are described below. Note also that no forparameter to the right of one of form d. can be executed.

Note that if the scope of a FOR (the "outer" FOR) contains an "inner" FOR, one execution of the scope of the outer FOR encompasses all executions of the scope of the inner FOR corresponding to one complete pass through the inner FOR’s forparameter list.

Execution of a QUIT within the scope of a FOR has two effects.

  1. It terminates that particular execution of the scope at. the QUIT; commands to the right of the QUIT are not executed.
  2. It causes any remaining values of the forparameter, in control at the time of execution of the QUIT, and the remainder of the forparameters in the same forparameter list, not to be calculated and the scope not to be executed under their control.

In other words, execution of QUIT effects the immediate termination of the innnermost FOR whose scope contains the QUIT.

Execution of GOTO effects the immediate termination of all FORs in the line containing the GOTO, and it transfers execution control to the point specified.

See also the transition diagram for For.

Button for 1977 Button for 1984 Button for 1990 Button for 1995 Button for MDC Button for notes Button for examples

Copyright © Standard Documents; 1977-2024 MUMPS Development Committee;
Copyright © Examples: 1995-2024 Ed de Moel;
Copyright © Annotations: 2003-2008 Jacquard Systems Research
Copyright © Annotations: 2008-2024 Ed de Moel.

This page most recently updated on 09-Jan-2024, 15:14:56.

For comments, contact Ed de Moel (demoel@jacquardsystems.com)