There is an alternative syntax that is often useful when existing procedures are being used to create new procedures. We have already used it in defining closures, above:
define
then <name of procedure>
then =
then an expression evaluating to a procedure
then
enddefine;
Examples:
A procedure formed by concatenating two other procedures
define pr_sqrt = sqrt <> pr enddefine;
pr_sqrt(16);
4.0
A procedure formed by partial application
define list_of_doubles =
maplist(%procedure (x); x + x endprocedure%)
enddefine;
list_of_doubles([1 2 3 4]) =>
** [2 4 6 8]
A procedure that's actually a property
define father_of =
newproperty([[tom joe][mary joe][harry dick]],100,false,true)
enddefine;
father_of("mary") =>
** joe
father_of("joe") =>
** <false>