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.