Richard Fateman (University of California) developed a simple mock-up of Mathematica (tm) written in Common Lisp and called Mock-Mma. It is a framework of a parser, display, polynomial manipulator, and a few other pieces, that allow one to program other pieces of a common-lisp systems for computer algebra. The pieces supplied are roughly consistent with conventions adopted by the Mathematica system. Mock-Mma is available by anonymous FTP from peoplesparc.berkeley.edu:/pub/mma.tar.Z

From the README file:

This is the underpinning of a common-lisp implementation of a small and efficient algebra system. The intention is to be as fast as possible without making major concessions to usefulness. Absolute brevity in code is not a goal, nor is complete perspicuity, if it is inconsistent with efficiency.

As far as efficiency goes, it is expected that for similar problems, the code would be faster than Macsyma's rational function package, Reduce, or Maple, and generally much faster than Mathematica and much^2 faster than Macsyma's general representation.

It is our intention that no one would have any reasonable hope of making a package that was much faster, at least while coding in Lisp, and that there would be no need to look inside the package for most users. It is also our hope that even by going to C or assembly language, not much of a speedup could be expected. Of course eliminating some features (e.g., going to fixed precision rather than arbitrary precision integers), can result in savings.

How general a set of features do we need? For example, I consider multi-variate polynomial arithmetic essential, as well as arbitrary precision integer coefficients. By contrast, computation in non-commutative variables is not supported. Although only a simple polynomial GCD is used, more elaborate and faster versions have been written (not debugged).

The meaning of coefficients in the canonical form package (poly.lisp can be altered (see definition of coefp) to any numeric type (or all numeric types)or something else (though there should be redefinition of coefficient operations like * + ^ zerop etc.)

Non-portable CL stuff: We believe that by using the loading file init2.lisp, other CLs other than the one we used, can work. In particular, Lucid and KCL.

For some people the major or only item of interest here is the parser, which parses the Mathematica (tm of WRI) language. It will simulate a simple mathematica-like system.

Experimental Systems