Kent  Pitman's

Personal FAQ

Kent's Lisp Contributions

What have you done for Lisp, Kent?

People sometimes ask what my contributions to the Lisp world have been. This page maintains at least a partial list, though I've probably still left a bunch of things out. e.g., I didn't really talk about applications I've written in lisp except where they were relevant to feeding back something into the design or public promotion of Lisp.


Many of my contributions are textual, documenting what others have done, and findable at my publications page. For example:


I designed and implemented a dialect of Lisp, Ulisp, that was used for one semester teaching during a transition period before Scheme was available for students. (For those who were at MIT, Ulisp was vaguely based on Delphi Lisp, but was implemented in Maclisp, and basically hid most of Maclisp complexity and weirdness in favor of a simpler model designed for teaching.)


I implemented a simple Lisp compiler in Teco so that people's Zmail init files could be used with my ZBABYL library, an extension to Teco-based BABYL, in particular allowing their "filters" to work without textual modification in most cases. (BABYL was the mail reader of choice on MIT's ITS computers. Gnu Emacs has a mail reader library called rmail which is really a logical descendant of TECO-based BABYL, not of teco-based RMAIL.)


I didn't implement Maclisp nor really work on its internals at all. I did share an office with Steele and JonL White, and learned enough through them and others around me to document the language to a fair degree of detail, producing The Revised Maclisp Manual (a.k.a. The Pitmanual). [The original Maclisp Manual by David Moon (a.k.a. the Moonual), while of excellent quality for as far as it went, had frustrated people by its gaping omissions and because it was not kept up to date as the language changed over subsequent years.]

During that time using Maclisp, I wrote my first important paper, Special Forms in Lisp, which many have cited as the reason there are no more fexprs. That might or might not be so; I was mostly documenting a pre-existing mood, but the paper certainly seemed to bring the matter to a head.

I implemented early macros like IOTA (a variant of what became WITH-OPEN-FILE) and PI (a variant of what became WITHOUT-INTERRUPTS). I proposed that PROG was too complicated and should be split into component parts; my proposed names were not used, but the partitioning into TAGBODY/BLOCK by Steele a couple years later followed my proposal.) I championed the "novel idea" that users might prefer to work in Base 10 instead of Base 8. (an enormous number of Lisp users seemed to think Base 8 was more intelligible; sigh ... only Dave Touretzky and me and a handful of renegades pushed at all hard for Base 10. Many Lisp luminaries fought bitterly for the perpetuation of base 8, which was the radix of choice on the 36-bit PDP10, in spite of the PDP11 and VAX preference for hex, which still wouldn't have been better than base 10 as a default radix).

Common Lisp

I was involved in the design discussions for the original Common Lisp language.


I worked a long time on Macsyma, a 100,000 line commercial Lisp application. Some of this work was at MIT, and some at Symbolics.

It was originally written in a heavily conditionalized conglomeration of dialects like Maclisp (no relation to the Macintosh, which didn't exist yet), Zetalisp, and Franz Lisp (no relation to Allegro Common Lisp from Franz Inc.; more like a variant of Maclisp). I translated commercial Macsyma to Common Lisp. [There was another source stream for Macsyma maintained by the DOE that had to be independently translated, alas.]

Later, when I tried to port CL Macsyma among CLTL implementations, gaining important experience that later was useful to X3J13.

T (Yale Scheme)

I worked with Jonathan Rees at Yale to design the T dialect of Scheme. I invented the notion of 'locales'. I implemented the first prototype version of the T object system in an emulated implementation of T that ran in Maclisp while Jonathan was bootstrapping the first compiler. I did a lot of early work in macro hygiene for Scheme, though the solution I came up with (and never published) was more compatible with Bawden's later "syntactic closures" than the "painting" approach taken by Kohlbecker and adopted by the community.

Revised Report Scheme

I have been a participant in the design of Scheme, attending meetings of the Revised Report authors for many years.

I've worked with several of the others in the Scheme community to try to devise condition systems that had the power of the CL system but would fit culturally into Scheme.


I did various projects on top of an in the internals of Symbolics Common Lisp.

An example was the implementation of a partitioning system that allows the many co-resident dialects of Lisp to be co-resident and cross-call each other even though their package structures vary widely. The system is based on functions like SYS:FIND-PACKAGE-FOR-SYNTAX, that sit below the more commonly known Common Lisp CL:FIND-PACKAGE or Zetalisp ZL:FIND-PACKAGE and resolves the fact that Zetalisp and Common Lisp both have "USER" packages that are different.

I worked on the Symbolics CLOE implementation, a system for developing code on Symbolics hardware and deploying it on native 386 machines, something that was considered quite novel in the Symbolics community at the time.

ANSI Common Lisp

I took copious notes on the porting failures of Macsyma, and contributed those back as "cleanup issues" for ANSI CL. I think I personally initially authored something like 1/3 of the x3j13 cleanup issues, mostly clarifying non-portabilities.

Some important changes between CLTL and ANSI CL that I don't think would have happened without my prodding are the entire condition system, the presence of compiler macros, the 'designator' terminology and the entire glossary of the ANSI CL spec.

I didn't invent the CL "error system" but I did think it was worth re-casting from an obscure LispMachine facility into Common Lisp and did a lot of political work to get vendors to adopt it, including writing a portable sample implementation (which I think most vendors ultimately started with) and managing its ever-changing spec.

I helped to keep CL from becoming a Lisp1, which not everyone will consider positive, but which I did. ;) I invented the terms Lisp1/Lisp2 to refer to the number of namespaces. Dick Gabriel and I wrote a paper about this for use by the Common Lisp committee; a subset of that paper was republished in the first issue of the Lisp and Symbolic Computation journal. I advocated that becoming Lisp1 would require substantial changes to the macro system (macro hygiene facilities are needed in a Lisp1 but not a Lisp2), as well as making arguments about efficiency. See the paper for details.

I later became Project Editor for ANSI Common Lisp, which was a neutral (non-technically-contributory) role. I sometimes participated as a technical participant. I consider myself largely responsible for the presence of the glossary in the final spec, having both conceived its presence and written a large number of the entries. (There was a great deal of help reviewing and revising things, so it's improper to take sole responsibility for anything, but I think I was, as the document said, a major contributor.)

In my role as editor, I had the good sense and will to work behind the scenes to do some legal maneuvering that created a proper legal foundation for CLHS to be published, and I devised the legal vehicle which allowed it to be funded by the advertising it produced, allowing it to be widely distributed at no cost (where hardcopy ANSI CL would have cost in the hundreds, I think $300). I later wrote the translator that translated the TeX sources for ANSI CL into the CLHS. Then I persisted internally against lots of problems for more than a year and a half to convince then-Harlequin that this was worth publishing (sigh). It didn't come out until after the webbed CLTL2, but was ready to go out a full year before...


I worked with the ISO Lisp organization as US Representative (from X3J13) and Project Editor, helping to achieve international consensus in a small Lisp dialect, ISLISP, that I would call "culturally compatible" with ANSI CL. This dialect had the important features that it didn't threaten ANSI CL's market position and it helped insulate some isolated Lisp development communities abroad from being forced to become ANSI compliant (which would more likely have just killed those implementations).

I implemented a package for ISLISP compatibility in Common Lisp before it was finalized, and reported which operators could not be portably implemented. As a result of that test, Common Lisp added DEFINE-SYMBOL-MACRO and the LAMBDA macro for compatibility with a portable ISLISP.

Miscellaneous Cheerleading

I created and published a column in Lisp Pointers called "Parenthetically Speaking".

I was interviewed in Slashdot about Lisp and Scheme, which seems to have done some good with the public.

I've published various papers and book chapters on Lisp. See my publications page.

I chaired the 1994 Lisp Users and Vendors conference, and have spoken as an invited speaker at numerous other conferences, including Lisp Users and Vendors (LUV) and the International Workshop on Lisp Evolution and Standardization (France, 1988). At the 1990 European Conference on the Practical Application of Lisp (EUROPAL), I wont a "best paper" award for my paper describing error handling concepts.

I also sometimes field questions on the comp.lang.lisp usenet newsgroup.

HomeContactDonateLegal Notices

Copyright © 2010 by Kent M. Pitman. All Rights Reserved.