The
LISP language is the venerable Latin of computer languages. Developed by John
McCarthy in 1951, it is one of the oldest and most successful computer languages
still extant. It has long been the language of choice for 'artificial intelligence'
research, and many Mathematics languages, including Logo, Macsyma, Maple, Mathematica,
and Mathwright, to name a few, were originally written in LISP.
Why
LISP ? The argument could hardly be more eloquently and convincingly made than
it was by Seymour Papert in his book, Mindstorms. Languages like Logo
and LISP encourage genuinely interactive and incremental program design. They
allow the creation of clusters of programs that interact among themselves, and
that can be debugged and developed separately. According to Jean Piaget, 'To
understand is to invent', and LISP/Logo environments provide fertile
ground for exploration and invention.
Mathwright
WorkBooks are multi-page hypertext documents in which the readers create structure
(such as mathematical objects) as they go. They combine and transform these
objects, compare them from many angles (algebraic, analytic, logical, and graphical,
for example), and so WorkBooks cannot 'know' in advance the full range of a
user's interaction. Only in this way, by being flexible and dynamic, can the
WorkBooks encourage and support student questions.
Mathwright's
Lisper LISP interpreter takes advantage of these features of LISP to create
an interactive and extensible mathematical environment. And this fact is best
understood by the authors of Mathwright WorkBooks, who find that the object
paradigm and MathScript, our scripting language (written in
LISP), provide an easy way for them to translate their mathematical ideas into
lively interactions. But in our WorkBooks, and in MathScript, the LISP language
is hidden
from sight. So we devote a few words here to LISP itself, the shy and gentle
giant that worked behind the scenes to create Logo and Macsyma, Mathematica,
Maple,
Derive
and Mathwright.
LISP
was actually the instantiation for computers in the '50s of the 'lambda
calculus' of mathematical logician Alonzo Church. The latter is an
elegant style of binding variables in functions that lends itself to the design
of powerful and perspicuous, yet simple and transparent recursive algorithms.
One
of LISP's charming features is that 'correct' LISP programs tend to be simple
and elegant. Obviously, this is a matter of taste. Still it is difficult to
write in LISP an 'ugly' program that works well. On the other hand, because
of its very strict (because uniform and general) syntactic constraints, LISP
has often been referred to as 'a language of parentheses'. To this charge the
most straightforward answer is that one gets used to the parentheses, and comes
to appreciate them. A more oblique answer is the following: LISP is essentially
an extremely high-level machine language in which one then writes
other languages,
such as Macsyma, REDUCE, or Logo,
suited to specific purposes. As such it was extremely flexible, and tended to
be extended and ramified (and babelized) quickly. Java has experienced a similar
explosive development because of the simplicity of its basic structure.
In
fact, it is not difficult to write a LISP interpreter in LISP itself! In particular,
however, many of the main applications of LISP are written on top of LISP, they
are even higher-level languages whose 'machine language' is LISP. MathScript
is a prime example. The actual computing environment can be quite 'friendly'.
A setting such as Logo, in fact, was designed to be easily accessible to children.
The
serious learner would do well to consult a text such as Tony Hasemer's Looking
at LISP or Wilensky's LISPcraft for an more extensive treatment of
the subject. Like the game of 'Go', LISP is both simple and profound. In this
respect also it differs from other computer languages. One has the feeling,
having learned the 'rules' (the syntax, the conventions) of most languages that
the entire landscape of what is possible has at least been glimpsed, and it
is a matter of gaining experience and learning the details. But, speaking for
myself, the understanding of the structure and the dynamics of LISP evaluation,
did not bring the feeling that I had grasped the essence of this amazing language.
On the contrary, it left me feeling that nearly everything of importance about
it was yet to be learned.
The
Lisper LISP Interpreter (on which MathScript is based) is an extension of LISP
1.5 as specified by McCarthy et. al. in the LISP 1.5 Programmer's manual.
The extensions are designed to make it especially strong in graphics, numerics,
symbolic mathematics, and unification pattern matching for its Expert System
and forward and backward chaining production systems. The Lisper LISP interpreter
was written in assembler in 1984 by James E. White. MathwrightWeb, written in
2001, contains the latest and most powerful version (32-bit) of that interpreter.
As
mentioned, an earlier version of Lisper is also the machine language for MathScript,
the mathematics scripting language at the base of Mathwright. Lisper has a built-in
parser for reading algebraic expressions written in infix (as opposed to prefix)
form, and it supports five number types (including infinite precision integers
and decimals, and a rational number type). It also contains 7 built-in data
types: Names, Lists, Numbers (five types), Primitive functions, Vectors, Strings,
and Matrices.
In
addition, Lisper itself is an object-oriented programming language, and it implements
primitives for run-time definition of Classes of Objects and their hierarchies,
data encapsulation,and inheritance of data and methods much like SmallTalk,
Java, and C++. The difference is that Lisper is interpreted, and these features
may be set at run-time.
Lisper
was originally designed in MS-DOS Assembler, but is now implemented in Java
2, and is well suited for its current incarnation in the web environment as
MathwrightWeb. As far as graphics
are concerned, it contains primitives implementing 2D Graphics for sprite animation.
Another
version of Lisper sits at the base of MindScapes, and currently
renders 3D simulations and animations with OpenGL.
Two
aims have guided the design of the Lisper LISP interpreter. The first is that
Lisper should be a sufficiently powerful language to support what Seymour Papert,
in his book on computers and mathematical pedagogy Mindstorms, has called 'Piagetian
learning'. This language can serve as a heuristic and an exploratory tool in
the study of mathematical topics from beginning Algebra through Multivariable
Calculus. The second aim is that Lisper should be simple and transparent enough
to convey the basic principles of algorithm design, data structuring, and 'discrete'
computational methods which appear in the beginning curricula in 'computer science'
and, increasingly, in mathematics curricula at the college level.
| - James E. White, Ph.D. , Library Director, | ||
| author of this website, Mathwright Author 2000, | ||
| Mathwright MindScapes, and MathwrightWeb |