A procedure may be called by a call statement, or be called as a function proceure by
the appearance of its name in an expression. When called by a call statement, the value,
if any, returned by the procedure is ignored.
The return statement, or reaching the end statement of the procedure, returns
control to the statement following the call. Return <expression> causes
<expression> to be evaluated and its value returned as the value of a function procedure.
If a procedure does not return with return <expression> the returned value