27 lines
650 B
Plaintext
27 lines
650 B
Plaintext
MODULE Callback EXPORTS Main;
|
|
|
|
IMPORT IO, Fmt;
|
|
|
|
TYPE CallBack = PROCEDURE (a: CARDINAL; b: INTEGER);
|
|
Values = REF ARRAY OF INTEGER;
|
|
|
|
VAR sample := ARRAY [1..5] OF INTEGER {5, 4, 3, 2, 1};
|
|
callback := Display;
|
|
|
|
PROCEDURE Display(loc: CARDINAL; val: INTEGER) =
|
|
BEGIN
|
|
IO.Put("array[" & Fmt.Int(loc) & "] = " & Fmt.Int(val * val) & "\n");
|
|
END Display;
|
|
|
|
PROCEDURE Map(VAR values: ARRAY OF INTEGER; size: CARDINAL; worker: CallBack) =
|
|
VAR lvalues := NEW(Values, size);
|
|
BEGIN
|
|
FOR i := FIRST(lvalues^) TO LAST(lvalues^) DO
|
|
worker(i, values[i]);
|
|
END;
|
|
END Map;
|
|
|
|
BEGIN
|
|
Map(sample, NUMBER(sample), callback);
|
|
END Callback.
|