showcase13.mod 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  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{...}. Expected ExitCode: 42.
  5. VAR ExitCode : INTEGER;
  6. VAR s, t : BITSET;
  7. VAR n : INTEGER;
  8. // --- mutual recursion via FORWARD -------------------------------
  9. PROCEDURE Even (k : INTEGER) : BOOLEAN; FORWARD;
  10. PROCEDURE Odd (k : INTEGER) : BOOLEAN; FORWARD;
  11. PROCEDURE Even (k : INTEGER) : BOOLEAN;
  12. BEGIN
  13. IF k = 0 THEN RETURN TRUE ELSE RETURN Odd(k - 1) END
  14. END Even;
  15. PROCEDURE Odd (k : INTEGER) : BOOLEAN;
  16. BEGIN
  17. IF k = 0 THEN RETURN FALSE ELSE RETURN Even(k - 1) END
  18. END Odd;
  19. BEGIN
  20. n := 0;
  21. IF Even(8) THEN n := n + 10 END; // TRUE -> 10
  22. IF Odd(7) THEN n := n + 11 END; // TRUE -> 21
  23. s := BITSET{1, 3, 5}; // typed set constructor
  24. t := BITSET{5, 7};
  25. IF 3 IN s THEN n := n + 10 END; // member -> 31
  26. s := s + t; // union {1, 3, 5, 7}
  27. IF 7 IN s THEN n := n + 11 END; // member -> 42
  28. ExitCode := n
  29. END Showcase13.