May 2001(I wrote this article to help myself understand exactlywhat McCarthy discovered. You don't need to know this stuffto program in Lisp, but it should be helpful to anyone who wants tounderstand the essence of Lisp — both in the sense of itsorigins and its semantic core. The fact that it has such a coreis one of Lisp's distinguishing features, and the reason why,unlike other languages, Lisp has dialects.)In 1960, John McCarthy published a remarkable paper inwhich he did for programming something like what Euclid did forgeometry. He showed how, given a handful of simpleoperators and a notation for functions, you canbuild a whole programming language.He called this language Lisp, for "List Processing,"because one of his key ideas was to use a simpledata structure called a list for bothcode and data.It's worth understanding what McCarthy discovered, notjust as a landmark in the history of computers, but asa model for what programming is tending to become inour own time. It seems to me that there have beentwo really clean, consistent models of programming sofar: the C model and the Lisp model.These two seem points of high ground, with swampy lowlandsbetween them. As computers have grown more powerful,the new languages being developed have been movingsteadily toward the Lisp model. A popular recipefor new programming languages in the past 20 years has been to take the C model of computing and add toit, piecemeal, parts taken from the Lisp model,like runtime typing and garbage collection.In this article I'm going to try to explain in thesimplest possible terms what McCarthy discovered.The point is not just to learn about an interestingtheoretical result someone figured out forty years ago,but to show where languages are heading.The unusual thing about Lisp — in fact, the definingquality of Lisp — is that it can be written initself. To understand what McCarthy meant by this,we're going to retrace his steps, with his mathematicalnotation translated into running Common Lisp code.