procname - Maple Help

procname and thisproc

reference to the currently executing procedure

Description

 • Within a running procedure, the special name procname is substituted by the name with which the procedure was invoked, and the special name thisproc is substituted by the actual procedure invoked.
 • If there was a chain of evaluations leading to the procedure then procname is the ''last name evaluated'' in the chain. If there is no name then the name unknown is used.
 • One common use of procname is for a fail return, where it is desired to return the unevaluated function call as the result. This is accomplished by the construct:  'procname(_passed)'.
 • Note:  This concept of the last name evaluated is also the concept used to determine the result of evaluation in the case of a procedure (or a table).  Namely, for these cases, the result of evaluation is the last name evaluated in the chain of evaluations, and if there is no name then the procedure (or table) structure results.
 • A common use of thisproc is to implement a recursive call to the currently executing procedure without having to hard code the procedure's name into the procedure body. If procname were used for this purpose, the recursive call would fail if the original procedure was called without referring to it by a name.
 • For information about the procedure option named procname, see option.

Examples

 > f := proc (a)     if a > 0 then         a^(1/2)     else         'procname( _passed )'     end if end proc:
 > $g≔f$
 ${g}{≔}{f}$ (1)
 > $g\left(2\right)$
 $\sqrt{{2}}$ (2)
 > $g\left(-1\right)$
 ${f}{}\left({-1}\right)$ (3)
 > $f$
 ${f}$ (4)
 > $g$
 ${f}$ (5)
 > $h≔\mathrm{eval}\left(f\right):$
 > $h\left(2\right)$
 $\sqrt{{2}}$ (6)
 > $h\left(-1\right)$
 ${h}{}\left({-1}\right)$ (7)
 > $h$
 ${h}$ (8)
 > fact := proc (a)     if a > 1 then         a * thisproc(a-1)     else         1     end if end proc:
 > $\mathrm{fact}\left(5\right)$
 ${120}$ (9)