Have you ever wanted well-documented source code for a LISP interpreter? If so, then LISP--A portable implementation could be for you. This text takes its reader routine-by-routine through the implementation of a moderate-sized LISP interpreter written in the C language. The text is organized along the lines of the source code; it contains chapters on storage management, input/output, expression evaluation, and flow of control. The appendix includes a table that maps LISP functions to the C module that implements them. The complete source is available on a 51-4--inch floppy diskette. As delivered, the interpreter runs on MS-DOS and is easily compiled on UNIX systems.
The author assumes that the reader is familiar with both the LISP and C languages. The target audience consists of practitioners who want a detailed look at a LISP implementation. Also, since the text is packed with logically organized and well-written C code, it could be used in a course on software engineering.
Unfortunately, there is little discussion of the decisions made during the design. The book contains descriptions of how Kernal (as the interpreter is called) works but no discussion of why particular algorithms were chosen nor of alternative algorithms. For example, in the presentation of the hashed symbol table, the author presents the data structures clearly, but does not mention alternate schemes nor does he discuss why the particular hash algorithm was chosen.
The text would benefit from a more complete index, especially if it listed each of the LISP functions. Since the description of each function is presented along with its implementation, to get details on a function, the reader must determine where the function is implemented and then scan the chapter describing that module. This is a real nuisance, particularly since Kernal “is not based on any particular LISP dialect; it has its own dialect.” Alternatively, a reference manual for Kernal would be a boon.
On the whole, the text does a good job of presenting an interpreter for LISP, but unfortunately, it goes no further.