The main form of the procedure expression is
procedure([~]FORMAL_IDFIER, ..., [~]FORMAL_IDFIER)
STATEMENTS
end procedure
It creates a procedure whose formal identifiers are the ones listed inside the parentheses. If an identifier is prefixed with a ~ symbol, it is a reference identifier; otherwise it is a value identifier.
The most common use for a procedure expression is to assign it to an identifier immediately, but a procedure can be used as an object in its own right.
The other form of the procedure expression, useful only for adjusting or presetting actual arguments to a previously-existing procedure, is
proc< [~]FORMAL_IDFIER, ..., [~]FORMAL_IDFIER | EXPRESSION >
Here EXPRESSION must be a procedure call, possibly involving the formal identifiers.
Given a sequence Q of rational numbers and a Boolean b at runtime,
this procedure expression, assigned to the identifier intnon,
will remove from Q all the non-integral entries if b is true,
and all the integral entries if b is false:
> intnon := procedure(~Q, b)
> if b then
> Q := [Q[i]: i in [1..#Q] | IsIntegral(Q[i])];
> return;
> end if;
> Q:=[Q[i]: i in [1..#Q] | not IsIntegral(Q[i])];
> end procedure;
> Q := [6/7, 4, 9, 1/9, 5];
> intnon(~Q, false);
> print Q;
[ 6/7, 1/9 ]
> PrintLine := procedure(c, n)
> print c^n;
> end procedure;
> PrintLine("!", 30);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> PrintStars := proc< n | PrintLine("*", n) >;
> PrintStars(53);
*****************************************************
[Next][Prev] [Right] [____] [Up] [Index] [Root]