MODULE Showcase9; // Step 4.1 tour: procedures, value/VAR params, recursion, // array + open-array params, strings through calls. Exit 140. TYPE Vec = ARRAY [0..3] OF INTEGER; VAR ExitCode : INTEGER; PROCEDURE Double(n : INTEGER) : INTEGER; BEGIN RETURN n * 2 END Double; PROCEDURE Acc(VAR total : INTEGER; x : INTEGER); BEGIN total := total + x END Acc; PROCEDURE Sum4(a : Vec) : INTEGER; VAR i, s : INTEGER; BEGIN s := 0; FOR i := 0 TO 3 DO s := s + a[i] END; RETURN s END Sum4; PROCEDURE Head(VAR a : ARRAY OF INTEGER) : INTEGER; BEGIN RETURN a[0] END Head; PROCEDURE Fact(n : INTEGER) : INTEGER; BEGIN IF n <= 1 THEN RETURN 1 END; RETURN n * Fact(n - 1) END Fact; VAR v : Vec; VAR t : INTEGER; BEGIN v[0] := 10; v[1] := 20; v[2] := 30; v[3] := 40; t := 0; Acc(t, Double(5)); Acc(t, Sum4(v)); Acc(t, Head(v)); Acc(t, Fact(5) MOD 100); ExitCode := t END Showcase9.