On 9/26/2010 8:29 AM, Dieter Kaiser wrote:
> Because we do not have a technical documentation of Maxima internals, I
> have started to write some documentations of functions I have worked on.
> The following examples try to document the functions PLS, ADDK, EXPTA,
> and EXPTB in simp.lisp. I have taken the Common Lisp HyperSpec as a
> guide to document the functions.
I assume you have seen
http://www.cs.berkeley.edu/~fateman/papers/simplifier.txt
There are also some papers and programs suggesting various significant
efficiency hacks,
useful if the length of ((mplus simp) .....) exceeds some modest
size. In particular,
instead of using a list, one can use a hash table. That is ..
((mplus simp) <hash table>)
Also, there is a possibility of making all subexpressions "uniquely
stored". That is, for any
two expressions A and B,
(equal A B) means that (eq A B).
This substantially changes the cost of some algorithms, but it means
that you need something
like a "hashing cons". this is a program that inserts every dotted
pair in a hash table...
(hashcons a b) looks up "a . b" in the hash table and returns that..
or inserts it there.
This discussion is not a documentation of the existing programs, but
might be useful to note
because others looking at the code might be tempted to consider such
changes or modernizations.
In my view these are potentially major wins, but only if the lisp has
good hash tables.
(My recollection is that my tests in Allegro CL were far more successful
than Barton Willis's
tests in GCL[?])
RJF