showcase13.mod 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. MODULE Showcase13;
  2. // Step showcase: FORWARD declarations driving mutual recursion, plus
  3. // BITSET set operations (union, membership) and the typed set
  4. // constructor BITSET{...}. Prints a result and exits 42.
  5. IMPORT SysIO;
  6. VAR ExitCode : INTEGER;
  7. VAR s, t : BITSET;
  8. VAR n : INTEGER;
  9. // --- mutual recursion via FORWARD -------------------------------
  10. PROCEDURE Even (k : INTEGER) : BOOLEAN; FORWARD;
  11. PROCEDURE Odd (k : INTEGER) : BOOLEAN; FORWARD;
  12. PROCEDURE Even (k : INTEGER) : BOOLEAN;
  13. BEGIN
  14. IF k = 0 THEN RETURN TRUE ELSE RETURN Odd(k - 1) END
  15. END Even;
  16. PROCEDURE Odd (k : INTEGER) : BOOLEAN;
  17. BEGIN
  18. IF k = 0 THEN RETURN FALSE ELSE RETURN Even(k - 1) END
  19. END Odd;
  20. PROCEDURE Show (label : ARRAY OF CHAR; v : INTEGER);
  21. BEGIN
  22. SysIO.Write(label);
  23. SysIO.WriteInt(v);
  24. SysIO.WriteLn
  25. END Show;
  26. BEGIN
  27. n := 0;
  28. IF Even(8) THEN n := n + 10 END; // TRUE -> 10
  29. IF Odd(7) THEN n := n + 11 END; // TRUE -> 21
  30. s := BITSET{1, 3, 5}; // typed set constructor
  31. t := BITSET{5, 7};
  32. IF 3 IN s THEN n := n + 10 END; // member -> 31
  33. s := s + t; // union {1, 3, 5, 7}
  34. IF 7 IN s THEN n := n + 11 END; // member -> 42
  35. Show("Even(8)=T Odd(7)=T total=", n);
  36. ExitCode := n
  37. END Showcase13.