A top-level procedure is a procedure declared in the outermost scope of a module. Any other procedure is a local procedure. A local procedure can be passed as a parameter but not assigned, since in a stack implementation a local procedure becomes invalid when the frame for the procedure containing it is popped. A procedure constant is an identifier declared as a procedure.
R is the result type, which can be any type but an open array type.
ANY representing the set of all exceptions. Name is an identifier that names the parameter. The parameter names must be distinct. Type is the type of the parameter. Default is a constant expression, the default value for the parameter.