repeat, while -- repeat and
while loop
Introductionrepeat - end_repeat is a loop that evaluates its body
until a specified stopping criterion is satisfied.
while - end_while represents a loop that evaluates its
body while a specified condition holds true.
Call(s)
repeat
body
until condition end_repeat _repeat(body, condition)
while condition do
body
end_while _while(condition,
body)
Parametersbody |
- | the body of the loop: an arbitrary sequence of statements |
condition |
- | a Boolean expression |
Returnsthe value of the last command executed in the body of the loop. If
no command was executed, the value NIL is returned. If the body of a
while loop is not evaluated due to a false condition, the
void object of type DOM_NULL is returned.
Further
DocumentationChapter 16 of the MuPAD Tutorial.
Related
Functionsbreak, for, next, _lazy_and, _lazy_or
Detailsrepeat loop, first body and then
condition are evaluated until condition
evaluates to TRUE.while loop, condition is evaluated
before the body is executed for the first time. If
condition evaluates to TRUE, the loop is entered and
body and condition are evaluated until
condition evaluates to FALSE.while loop, the body of a
repeat loop is always evaluated at least once.: or a semicolon
;. Only the last evaluated result inside the body (the
return value of the loop) is printed on the screen. Use print to see intermediate
results.condition must be reducible to
either TRUE or FALSE. Internally, the condition
is evaluated in the lazy evaluation context of the functions _lazy_and and _lazy_or.next
and break can be used in
repeat and while loops in the same way as in
for loops.end_repeat and end_while may
be replaced by the keyword end.repeat - end_repeat and
while - end_while are equivalent to corresponding calls of
the functions _repeat and _while,
respectively. In most cases, the imperative forms should be preferred
because they lead to simpler code._repeat and _while are functions of the
system kernel.
Example
1Intermediate results of statements within a
repeat and while loop are not printed to the
screen:
>> i := 1:
s := 0:
while i < 3 do
s := s + i;
i := i + 1;
end_while
3
Above, only the return value of the loop is displayed.
Use print to see
intermediate results:
>> i := 1:
s := 0:
while i < 3 do
print("intermediate sum" = s);
s := s + i;
i := i + 1;
s
end_while
"intermediate sum" = 0
"intermediate sum" = 1
3
>> delete i, s:
Example
2A simple example is given, how a repeat
loop can be expressed via an equivalent while loop. For
other examples, this may be more complicated and additional
initializations of variables may be needed:
>> i := 1:
repeat
print(i);
i := i + 1;
until i = 3 end:
1
2
>> i := 1:
while i < 3 do
print(i);
i := i + 1;
end:
1
2
>> delete i:
Example
3The Boolean expression condition must
evaluate to TRUE or
FALSE:
>> condition := UNKNOWN:
while not condition do
print(Condition = condition);
condition := TRUE;
end_while:
Error: Unexpected boolean UNKNOWN [while]
To avoid this error, change the stopping criterion to
condition <> TRUE:
>> condition := UNKNOWN:
while condition <> TRUE do
print(Condition = condition);
condition := TRUE;
end_while:
Condition = UNKNOWN
>> delete condition:
Example
4We demonstrate the correspondence between the functional
and the imperative form of the repeat and
while loop, respectively:
>> hold(_repeat((statement1; statement2), condition))
repeat
statement1;
statement2
until condition end_repeat
>> hold(_while(condition, (statement1; statement2)))
while condition do
statement1;
statement2
end_while
end can be used as an
alternative to end_repeat and end_while.