break routine effectively destroys a loop.
Its primary application is to exit a loop prior its planned end.
Break, with its special meaning of abandoning a loop, can only be written within loops.
It is not a reserved word¹, therefore you could shadow it, but access it by writing the fully qualified identfier
system.break at any time, though.
The following program tackles the Collatz problem.
collatzIterative uses a
break, a) to check for the terminating condition according to Collatz' problem, b) to abort prior reaching the data type's boundaries, and c) while still using the advantage of the
for-construct (i.e. automatically incrementing a variable within a specified range).
1 program collatz(input, output, stderr); 2 3 procedure collatzIterative(n: qword); 4 var 5 i: qword; 6 begin 7 for i := 0 to high(i) do 8 begin 9 writeLn('step ', i:20, ': ', n); 10 11 // Collatz conjecture: sequence ends with 1 12 if (n = 1) or (n > (high(n) / 3 - 1)) then 13 begin 14 // leave loop, as next value may get out of range 15 break; 16 end; 17 18 // n := ifThen(odd(n), 3 * n + 1, n div 2); 19 if odd(n) then 20 // n is odd 21 begin 22 n := 3 * n + 1; 23 end 24 // n is even 25 else 26 begin 27 n := n div 2; 28 end; 29 end; 30 end; 31 32 var 33 n: longword; 34 begin 35 readLn(n); 36 37 if n < 1 then 38 begin 39 writeLn(stderr, 'not a positive integer'); 40 halt(1); 41 end; 42 43 collatzIterative(n); 44 end.
for-loop in conjunction with a
break is adequate, since the Collatz conjecture hypothesizes that the described function eventually ends in
1, but does not tell for sure.
Therefore – mathematically speaking – writing
while n <> 1 do does not consider the circumstance, that the problem is an assumption, but would suggest it is determined to eventually result in
n = 1.
However, the usage of
break is usually considered as bad style, since it “delegitimizes” the loop's condition expression.
You have to know a loop's statement block contains a
break to determine all abort conditions.
exitto return from routines
continueto skip the rest of an iteration
- compare remarks in the reference manual § “The
downto..dostatement” and § “reserved words”