I think that this is rather a "package" problem. I think that there should
not be a distinction between builtin and not-builtin functions, but rather
a package "user" where (per default) all the functions defined in a
session go into.
This looks a little cryptic to me, so I try again:
Just as in Maple, Mathematica, MuPad, ... (probably in all major CAS),
there should be a way to define a "package". For example, there could be a
package "combinatorica" where all the related functions go in. Finally,
there would be a package "user", where all the definitions that the user
types at runtime go in (if he doesn't state otherwise).
The best thing might be to try to re-use the common-lisp packaging system.
Not too sure about this, but maybe we could solve two issues in one go: I
find it rather annoying that it is not clear which parts of the system
some "module" (such as hayat or combin) actually uses. It also reminds on
our discovery that "if" and "complement" are not only common-lisp macros,
but also defined in maxima...
By the way, could somebody explain to me what the command
(macsyma-module name) does? Is this the starting point for such a
packaging system?
I do have rather strong feelings for this point, I think it is *very*
important for maxima's future. Ah yes, and I quickly should disclaim that
I am aware of the fact that such a system might raise new problems and
leave some existing problems unsolved... Still, I'm pretty sure that it is
the "right" approach. After all, it would go along with the documentation
task...
Martin