ZetaLisp is mostly descended from MACLISP. ZetaLisp is documented in the Lisp Machine Manual.
For information about running ZetaLisp on modern computers, see the Lisp Machine emulator information at http://www.unlambda.com/.
Following notes come from source code of LMI K-Machine:
What is ZETALISP?
- ZETALISP consists of a set of EXPLICIT PRIMITIVES, UTILITY FUNCTIONS, CONSTANTS, VARIABLES, and TYPES and a specification of the behavior of these functions under certain circumstances.
- ZETALISP is complete in that all of the primitives which ZETALISP provides are specified (in the microcode). For example, the SETF macro causes (SETF (AREF <array> <index>) <new-value>) to change the contents of the array. Because SETF expands into lisp code that modifies the array, there must be a primitive that can mutate the array. ZETALISP provides ASET.
- ZETALISP is not overspecified, every part of ZETALISP is there for a purpose (albeit not always a good or even useful one).
- ZETALISP is defined by the environment running on the LISP machine.
We can divide ZETALISP into several classes of functions, constants, variables and types.
- Common LISP compatible: Where ZETALISP and Common LISP behave identically. Code that is Common LISP compatible does not need any modification.
- Common LISP orthogonal: ZETALISP utilities that would run equally well under Common LISP. Extra ZETALISP features.
- Common LISP superset: Where Common LISP specifies that "it is an error" to do some particular thing, ZETALISP allows such a thing. Example "It is an error if the array specified as the :displaced-to argument does not have th esame :element-type as the array being created." ZETALISP allows that and "does the right thing" (which, actually, it shouldn't as anyone using this kind of bagbiter is a loser anyway.)
- Common LISP incompatible: ZETALISP does something completely different.
- K-machine incompatible: Features that cannot work on the K.
- A full Common LISP environment including the LISP, USER, KEYWORD, and SYSTEM package. The LISP package is to include all symbols mentioned by Common LISP and all functions are to work as specified in Common LISP. Any strict Common LISP program should run in this package.
- A Common LISP extension package. These are to be functions that will be written in Common LISP and will be supported indefinitely. The sources should be available to the user and the user's code should remain portable if he brings the sources over also.
- An object-oriented paradigm, probably Common LOOPS.
- A ZETALISP compatability package. These are to be functions that will be written in Common LISP, but perhaps not supported indefinitely. Portable code should be able to be written using these sources, but it should be discouraged.
- An EMACS editor, a compiler, an inspector, a debugger, an interpreter (evaluator), job control, and a garbage collector.
- A standard window system, when a standard is available.
- Any feature that we are not willing to support until the end of the world. Note that any feature that we add is likely to be used and will cost manpower to maintain. We may also have compatability problems across systems when we finally abandon the K and move on to better things.
- The internal system code. This is not so much for "security purposes" but to protect ourselves from the customers who won't listen to "don't use this feature" warnings. It may be true that we treat our customers like children, but unhappy customers generate less income than bug reports and pull down valuable programmers. I would rather piss off a thousand RMS's than one MCC.