The following (infinite) loops demonstrate the syntax:
// empty loop body is legal: repeat until false;
until already form a frame in their own right.
You do not need to surround your statements by an extra
In fact, you can put as many sequences (also called compound statements) between
until as you want:
repeat begin write('x'); end; begin write('o'); end; until false;
Note, it is not necessary, but allowed to put a semicolon prior
repeat write('zZ') until false;
Since the loop “head” appears at the tail, the loop body is executed at least once and the loop condition evaluated at the end of every iteration.
If the condition evaluates to
false, another iteration occurs.
until loops are particularly useful to ensure a certain sequence of statements is run at least once.
repeat write('Enter a positive number: '); readLn(i); // readLn loads a default value if the source is EOF. // For integer values the default is zero. // Since our loop condition requires _positive_ values, // this loop would be stuck _indefinitely_ if EOF(input). // Ergo, we check for that: if eof(input) then begin writeLn; writeLn(stdErr, 'error: input has reached EOF'); halt(1); end; until i > 0;
The user will be prompted again and again, but at least once, until he finally enters a positive number.
Another standard usage example is the reverse Horner scheme as demonstrated in Base converting.