A few years ago I wrote a tool, mgrep, for searching Maple repositories; download mgrep.zip. The zip file includes the noweb source (mgrep.nw), however, it is missing some of the files needed to rebuild the documentation—I will add them later when I bring an old drive back online. You should not, however, need to rebuild the documentation (mgrep.pdf) because it is included along with the shell-script (mgrep) and gawk file (mgrep.awk). To use the tool you will need to install mgrep and mgrep.awk in a directory in your path. The --help option prints a brief help page.
Here I use mgrep to partially explore a question that acer poses, that, whether % may be usefully employed in a Maple procedure. A reasonable start is to see whether it is so used in the distributed Maple library. First I go to the lib subdirectory of the Maple installation, then call mgrep to search maple.mla for all procedures that use % as a name
$ cd $MAPLE_ROOT/lib
$ mgrep --name % maple.mla
maple.mla:
fdiff
liesymm/difftools/convert/D1
convert/to_special_function/simplify
codegen/optimize/statseq/newname
codegen/optimize/count
procmake
procbody/toneutral
The --code (-c) option can be used to print the code. Here I'll use it to print the relevant portion of lieysmm/difftools/convert/D1:
$ mgrep -hca liesymm/difftools/convert/D1 maple.mla | sed /%/q
liesymm/difftools/convert/D1 :=
proc(F)
local t, t1, tot, f, g, h, x, vars, i, idx, y, p, gg;
option `Copyright (c) 1992 by J. S. Devitt. All rights reserved.`;
subs('Diff' = 'diff', F);
g := %;
I don't see the point of that usage, it seems as though the straightforward assignment g := subs('Diff' = 'diff', F) would work just as well.
The usage of % in the other procedures is of the form % || index, which generates %1, %2, etc.