HELP PROCEDURE A. Sloman and S. Hardy, Aug 1982
vars procedure foo;
procedure(<formal parameters>) -> <output parameters>;
<body>
endprocedure;
The syntax word PROCEDURE has two uses.
(1) It can be used to declare an identifier as of type PROCEDURE, e.g.
vars procedure foo;
constant procedure foo;
vars procedure(foo1, foo2, foo3);
to declare FOO to be a procedure identifier. It can also be used in the
heading of a procedure definition, e.g.
define foo(<list>, procedure <identifier1>) -> procedure <identifier2>;
specifies that FOO takes two arguments, of which the second must be a
procedure, and produces one result, also a procedure.
See also HELP *VARS and *CONSTANT.
(2) The word PROCEDURE can be used to introduce an anonymous procedure;
i.e. it tells the compiler to build a procedure, much as "[" tells it to
build a list. The procedure is not named, unlike procedures created
using DEFINE. The format is
procedure(<formal parameters>) -> <output parameters>;
<body>
endprocedure;
There need not be any formal parameters. If there are no output
parameters, the "->" is omitted. (There are optional additional
specifiers WITH_PROPS and WITH_NARGS which can be used in a procedure
header. For details see REF SYNTAX and HELP *WITH_NARGS.)
The procedure built is left on the stack, thus:
procedure(x); x + 1 endprocedure +>
** <procedure>
Usually we will want to do something with the procedure, for example:
procedure(x); x + 1 endprocedure(3) =>
** 4
maplist([10 3 7], procedure(x); x + 1 endprocedure) =>
** [11 4 8]
Frequently we want to assign a procedure to a variable, thus:
vars addone;
procedure(x); x + 1 endprocedure -> addone;
addone(3) =>
** 4
POP11 provides some 'syntactic sugar' for a combined declaration of
a variable and assignment to the variable:-
define addone(x); x + 1 enddefine;
is a neater way of saying that you want the variable ADDONE declared and
to have a procedure as its value. i.e. it declares a variable and
assigns as its value a procedure. (N.B. DEFINE also stores the name of
the new procedure in its *PDPROPS, which is useful for debugging).
PROCEDURE notation is most frequently used when passing procedures as
arguments; for examples of this use of the PROCEDURE notation see HELP
*MAPLIST.
For compatibility with older POP2 systems "LAMBDA" is defined as a macro
which is synonymous with "PROCEDURE". In addition "END" can be used
instead of "ENDPROCEDURE" (see HELP *DEFINE).
-- RELATED DOCUMENTATION ----------------------------------------------
See also
TEACH *DEFINE - tutorial introduction to defining procedures
HELP *DEFINE - for form and content of procedure definitions
HELP *MAPLIST - applying a procedure to each element of a list
HELP *PDPROPS - variable storing information about a POP-11 procedure
REF *PROCEDURE - details of the nature of procedures in POP-11
--- C.all/help/procedure -----------------------------------------------
--- Copyright University of Sussex 1987. All rights reserved. ----------Author: A. Sloman and S. Hardy, Aug 1982