/mma

Mathematica-style parser written in Common Lisp.

Primary LanguageHTML

This file is ~ftp/pub/mma.README at peoplesparc.Berkeley.EDU 128.32.131.14.
It describes a simple mock-up of Mathematica (tm) written
in Common Lisp.

To reconstruct this system on your unix system,
cd someplace with room for a few 100k bytes.
type:

ftp peoplesparc.Berkeley.EDU
 anonymous   %%response to name prompt
 your name  %%response to password prompt
image    %% or maybe, for some ftp systems, binary rather than image
cd pub
get mma.tar.Z
quit

%%now you're out of ftp
uncompress mma.tar.Z
tar xvf mma.tar

%% you are now the proud possessor of the files
%% you should probably try to compile them. If you are using Allegro,
%% you MUST compile hcons.lisp.

%note to myself...
The file mma.tar.Z was created by 

rm mma.tar.Z
tar cvf mma.tar ./mma.src
compress mma.tar
....
Change Log
23 Jan, 1991. Changed "atomwidth" in pf.lisp to make displaying much
 faster. 
26 Jan, 1991. Changed fpe-insert in rat1 to change x^2+x^4 to x^2*(1+x^2)
 when simplifying, if monom is set to true  (cheap factors...)
26 Jan, 1991. Changed parser to use Null rather than nil. e.g. a;
 is now (CompoundExpression a Null) instead of (CompoundExpression a nil).
27 Jan, 1991. Changed evaluator to use separate symbol table symtab
 rather than lisp object array. The symbol "t" no longer implies True.
 As a convenience, nil means False.
28 Jan, 1991. Fixed parser to correctly handle Optional and Function
 forms  a_:v  and #1+#2&[a,b]   resp.

18 Feb, 1991. Changed eval to include I = #c(0 1) in lisp. Complex
number arithmetic now appears to work...
13 Sept 1991.  Various changes noted in the parser file (bug fixes);
re-tarred.
04 Oct 1991.  Since WRI threatens (20 Sept 91)
to sue over the use of the name "Mathematica" we remove 
"L-Mathematica" from the heading.  We await
further word from WRI's lawyers as to whether Mock Mma meets with
their approval.  Lawyers also claim everything else (e.g. command
names) violate their copyright.  We similarly
await clarification; (noted on 27 Sept).
04 Oct 1991.  changed the order of "tar"ing and compressing to be
more conventional.
25 Oct 1991.  Fixed parsing of 1.03 to be different from
1.3; now it is (Real 1 3/10).
Fixed various files to be kcl compatible (thanks to
gotoda@is.s.u-tokyo.ac.jp (Hironobu Gotoda))  re-tarred.
20 March 1992. Fixed parser to handle @@ correctly (thanks to lvi@ida.liu.se)
..............
19 Nov 1992. On recommendation of Paulo Ney deSouza, stamped a version number, 1.5
 on the system.  No other change from March.

In[51] := I^(1/2)
Out[51] = 0.70710677 + 0.70710677 I

In[60] := sin[0.5+0.25I]
Out[60] = 0.4944858 + 0.22168818 I

In[61] := asin[%]
Out[61] = 0.5 + 0.25000003 I

The Head function returns the lisp type e.g. fixnum, ratio, etc. for
lisp "atom" types, otherwise the car of a consp, or the type of a
defined datatype (of which "rat" and "bigfloat") are plausible.

 Other comments: To allow the atom *, e.g. for use
 as  a[*]= b[*,col], do (setf (get '* 'mathtoken) nil).
 Matlab uses : for such a parameter.  in general low:step:high.  Mma
 has other uses for : though.  Q: should we do this?

 It is relatively easy to hook up this front end to use much of the
 Macsyma code via 2 interface routines to convert data. However,
 access to variable values, or other global data, is subtle.
 Sometimes it is just unnecessary, e.g. for most use of $SOLVE,
 $INTEGRATE, etc.