To call a procedure, use one of the following two forms:
procedure-expression "(" { argument ","
... } ")"
where argument = [ argument-name ":="]
expression
EVAL expression
The first form is used to call a proper procedure (one that does not specify a return type and thus has no return value). The second is used to call a function procedure when you want to throw away the return value. For example:
IO.Put("Hello"); (* Call a proper procedure *) EVAL IO.GetLine(); (* Call a function procedure and throw away result *)
To return from a procedure, use the following statement:
RETURN [ expression ]
The RETURN statement is used inside procedures only to return control to the caller. A return value must be supplied if the procedure is a function procedure, but may not appear if the procedure is a proper procedure.
PROCEDURE Warning (msg: TEXT) = BEGIN IO.Put ("warning: " & msg & "\n"); END Warning; PROCEDURE FindIndex (name: TEXT): INTEGER =
PROCEDURE FindAddress (name: TEXT): TEXT = VAR index := FindIndex(name); BEGIN IF index = -1 THEN (* Call the "Warning" procedure *) Warning ("could not find an address for " & name & ". Defaults used.\n") RETURN "123 Main Street USA"; END; RETURN Address[i]; END FindAddress;