Common LISP (CL) was recently introduced as a standard LISP dialect, but not without some controversy, exemplified by this anti-CL salvo from a well-known figure in the LISP community. Although the paper is primarily a standard tutorial on functional programming and LISP history, there is a good deal of virulent criticism directed at a number of targets. The author appears to object to commercial usage of LISP; a rather odd position for the president of a company offering LISP products. There are a number of declarations about the “LISP philosophy” that, when taken together, imply that LISP programmers interactively type in large programs for which efficiency is unimportant, then throw them away rather than transport to different hardware. (One wonders whether “large” means 1,000 lines or 100,000 lines of code.)
The most troubling aspect of this paper is its attempt to make technical issues out of political/preferential choices. For instance, the distinction between functional values and data values in CL is characterized as a “muddle”; however, the CL community understands the issues and even so remains split on whether the distinction is good or bad (or insignificant). Likewise, purported muddles relating to QUOTE and to names touch on philosophical questions with no universally accepted answers.
I should mention a serious mistake at the top of p. 57, where a compose function is defined nonsensically. One possible correct definition is the following:
The “more functional” version makes sense if it is written as follows:
(defun compose (f g)
(lambda (x) (f (g x))))
so that the variable x has a meaningful scope.
Overall, this paper is worthwhile for anyone interested in LISP, but the reader must exercise great care in sifting opinion from fact, a task made more difficult by the absence of a bibliography. (Many of the quotes are excerpted from papers given at the 1982 and 1984 LISP conferences [1,2].)