Sunteți pe pagina 1din 2

Page 1 of 2

Loops and IFs'


Two elements which must exist before a language can be useful are some means of altering execution
and some method of repetition. Here, the execution control is offered by a standard block IF
construct:
&IF, LPHRASE(1), &THEN
&ELSEIF, LPHRASE(2), &THEN
&ELSE
&ENDIF

Here, LPHRASE(1) and LPHRASE(2) are "logical phrases", and if LPHRASE(1) is .TRUE., then the
commands which follow will be executed until the &ELSE is encountered. If LPHRASE(1)
is .FALSE., then MOSES will evaluate LPHRASE(2). If it is .TRUE., then the commands following
&ELSEIF will be executed until &ELSE is encountered, otherwise the commands between &ELSE,
and &ENDIF will be executed. Both &ELSEIF and &ELSE may be omitted, and more than one
&ELSEIF can be placed between an &IF and &ELSE, but &IF and &ENDIF must always be
present. There is virtually no limit on the nesting of &IF blocks.
In MOSES, the concept of repetition is implemented via the constructs:
&LOOP, INDEX, BEGVAL, ENDVAL, INCR
&LOOP, VAR, ( LIST(1), ...... LIST(n) )
&NEXT, LPHRASE
&EXIT, LPHRASE
&ENDLOOP

The &LOOP command marks the beginning of a set of commands which will be repeated and the
&ENDLOOP command marks the end. When this construct is encountered, MOSES will continue to
execute the commands delimited until a termination criteria is satisfied. Termination can occur in one
of two ways depending upon the form of the &LOOP command itself. The parameters on the first
form of the &LOOP command allow for an "indexed" loop. In other words, INDEX is the name of a
local variable which will be set to the integer BEGVAL at the beginning of the loop, and it will be
updated to its current value plus INCR at each repetition. Loops of this type will terminate when
INDEX is greater than ENDVAL. The second form of &LOOP is a "while" on the values in
parenthesis. In other words, with this form, the variable VAR will be set to the value LIST(1) for the
first trip through the loop, LIST(2) for the second trip, etc. The loop will terminate after LIST(n) has
been used. Alternately, a loop will terminate whenever an &EXIT command is encountered with a
logical phrase of .TRUE.. The commands between the &LOOP and the &ENDLOOP are executed
in order. A "jump" to the bottom of a loop occurs whenever an &NEXT command is encountered
with a logical phrase of .TRUE.. An example of the first form of the loop command is shown below:
&LOOP I 1 &TOKEN(N %NODES%) 1
&SET J = %I%

Page 2 of 2

&NEXT &LOGICAL(%J% .EQ. 9)


&EXIT &LOGICAL(%I% .GT. 11)
&TYPE This is Loop Number %I%
&ENDLOOP

Here, I is the INDEX, and the loop continues from 1 to the number of tokens in the variable NODES,
in increments of 1. The variable J is set to the value of I each pass through the loop, and a message is
typed to the screen. If the J is equal to 9, the message is not printed. If I is greater than 11, or if I is the
number of tokens in the variable NODES, the loop is terminated.
To terminate execution of either a macro or a command file, one can use the command:
&EOFILE, LPHRASE

When this command is encountered, and LPHRASE is .TRUE., the command file or macro will
terminate execution. Similarly, one can conditionally terminate execution of the program by:
&FINISH, LPHRASE

which terminates the program if LPHRASE is .TRUE..

S-ar putea să vă placă și