showcase9.mod 903 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. MODULE Showcase9;
  2. // Step 4.1 tour: procedures, value/VAR params, recursion,
  3. // array + open-array params, strings through calls. Exit 140.
  4. TYPE Vec = ARRAY [0..3] OF INTEGER;
  5. VAR ExitCode : INTEGER;
  6. PROCEDURE Double(n : INTEGER) : INTEGER;
  7. BEGIN
  8. RETURN n * 2
  9. END Double;
  10. PROCEDURE Acc(VAR total : INTEGER; x : INTEGER);
  11. BEGIN
  12. total := total + x
  13. END Acc;
  14. PROCEDURE Sum4(a : Vec) : INTEGER;
  15. VAR i, s : INTEGER;
  16. BEGIN
  17. s := 0;
  18. FOR i := 0 TO 3 DO s := s + a[i] END;
  19. RETURN s
  20. END Sum4;
  21. PROCEDURE Head(VAR a : ARRAY OF INTEGER) : INTEGER;
  22. BEGIN
  23. RETURN a[0]
  24. END Head;
  25. PROCEDURE Fact(n : INTEGER) : INTEGER;
  26. BEGIN
  27. IF n <= 1 THEN RETURN 1 END;
  28. RETURN n * Fact(n - 1)
  29. END Fact;
  30. VAR v : Vec;
  31. VAR t : INTEGER;
  32. BEGIN
  33. v[0] := 10; v[1] := 20; v[2] := 30; v[3] := 40;
  34. t := 0;
  35. Acc(t, Double(5));
  36. Acc(t, Sum4(v));
  37. Acc(t, Head(v));
  38. Acc(t, Fact(5) MOD 100);
  39. ExitCode := t
  40. END Showcase9.