| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- MODULE Showcase13;
- // Step showcase: FORWARD declarations driving mutual recursion, plus
- // BITSET set operations (union, membership) and the typed set
- // constructor BITSET{...}. Prints a result and exits 42.
- IMPORT SysIO;
- VAR ExitCode : INTEGER;
- VAR s, t : BITSET;
- VAR n : INTEGER;
- // --- mutual recursion via FORWARD -------------------------------
- PROCEDURE Even (k : INTEGER) : BOOLEAN; FORWARD;
- PROCEDURE Odd (k : INTEGER) : BOOLEAN; FORWARD;
- PROCEDURE Even (k : INTEGER) : BOOLEAN;
- BEGIN
- IF k = 0 THEN RETURN TRUE ELSE RETURN Odd(k - 1) END
- END Even;
- PROCEDURE Odd (k : INTEGER) : BOOLEAN;
- BEGIN
- IF k = 0 THEN RETURN FALSE ELSE RETURN Even(k - 1) END
- END Odd;
- PROCEDURE Show (label : ARRAY OF CHAR; v : INTEGER);
- BEGIN
- SysIO.Write(label);
- SysIO.WriteInt(v);
- SysIO.WriteLn
- END Show;
- BEGIN
- n := 0;
- IF Even(8) THEN n := n + 10 END; // TRUE -> 10
- IF Odd(7) THEN n := n + 11 END; // TRUE -> 21
- s := BITSET{1, 3, 5}; // typed set constructor
- t := BITSET{5, 7};
- IF 3 IN s THEN n := n + 10 END; // member -> 31
- s := s + t; // union {1, 3, 5, 7}
- IF 7 IN s THEN n := n + 11 END; // member -> 42
- Show("Even(8)=T Odd(7)=T total=", n);
- ExitCode := n
- END Showcase13.
|