Memo 8 — John McCarthy

Pierre Menard, Inventor of LISP

The visible open source work left by this programmer is easily and briefly enumerated. It’s sad, therefore, to see all the criticism he’s posthumously receiving for the repositories he left unmaintained. The lovers of free work are never satisfied.

More interesting than his projects, are the articles that survived him. Diligence and care for the history of programming have allowed me to catalog the following items:

a) An introduction to Emil Post’s Tag System, which was based heavily on the work of L. De Mol (A deeper exploration of Menard work shows that he was never good at citing his sources or influences).

b) A refutation of David Turner’s Some History of Functional Programming Languages, where Menard argues that the original LISP was indeed based on Lambda Calculus.

c) An outrageous article where he claims that Donald E. Knuth invented Erlang. This article is based on some remote similarities between TAOCP’s Algorithm E and Erlang’s syntax.

d) A commentary of Guy Steele’s Debunking The “Expensive Procedure Call” Myth or, Procedure Call Implementations Considered Harmful or, Lambda: The Ultimate GOTO. Here Menard bases his comments on a Marxist view where talking of GOTO statements as “cheap” and procedure calls as “expensive” present an invalid dichotomy, since a capitalist economy tries to extract surplus value from open source work, and not from CPU cycles.

e) An essay where he tried to show that square brackets [] offer better usability than parentheses () for LISP like languages. This was disregarded as an April’s fool joke, which only helped to cement Menard’s lack of good taste in humor.

Menard was also an experimentalist. In the silence of his cubicle, peerless, away from the noise of pair programming, he created his most significant work, changing the history of computing as we know it. This work consist of all seventeen pages of John McCarthy’s Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I. This sounds like an absurdity; the purpose of this notes is to justify this “absurdity”.

Several open source projects inspired Menard’s undertaking. All of these wandered around the idea of implementing a LISP interpreter for language X, where X could be any language in vogue like Clojure, Java or Swift. He thought these projects were nothing more than mere weekend exercises. He wanted more, he wasn’t satisfied with just another LISP interpreter, he wanted to invent LISP. Needless to say, he never contemplated to copy-paste McCarthy’s work. His admirable intention was to produce the whole paper which would coincide–word for word and line for line–with that of McCarthy.

He chose LISP because he wanted to prove that this was the original primogenital programming language, that writing syntax trees was a preferable task than coding in the despicable ALGOL. “A programmer should be one with the computer, forget the compiler. Weaving syntax trees is the highest form of programming art”, wrote Menard in 2007. I suspect that Menard, being a fervent member of the Church of Emacs, just wanted to prove that his favored text editor, by being coded in Elisp, was superior than the ed successor, “that shall not be named”. Perhaps even harder was to type his program using a typewriter, forgetting years of typesetting his documents with TeX. According to his diary, the mechanical clicking of his typewriter was what allowed him to unleash his inventiveness and create LISP.

The first method he conceived was relatively simple. Know the IBM 704 instructions well, forget all he knew about the AI winter, put aside his well thought arguments about GOTO (shot during the Structured Programming Wars), and pretend he never showed fervor defending Liskov’s Abstract Data Types. His knowledge of UNIX regular expressions had to be let go in favor of Kleene’s pure ideas. He had to forget fifty years of computer science advances, and be the young John McCarthy.

Pierre Menard discarded this procedure because he thought it as too easy. He wanted to invent LISP with all the baggage of Pierre Menard, a XXI century computer scientist, as someone that knows that first, rest and combine are better terms than CAR, CDR and CONS, but that still favored them, because that is what it means to invent LISP. This made him omit McCarthy’s note of March 13, 1959, because adding the errata by McCarthy would have been the same as creating another character–McCarthy–but it would also have meant presenting LISP as a creation of that character, and not of Menard.

It is a revelation to compare Menard’s LISP with McCarthy’s. The latter, for example, wrote in page 15 the definition of evlam:

evlam[vars;exp;args]=[null[vars]->eval[exp];
l->evlam[rest[vars];subst[first[args];
first[vars];exp];rest[args]]]

Menard, on the other hand, writes:

evlam[vars;exp;args]=[null[vars]->eval[exp];
l->evlam[rest[vars];subst[first[args];
first[vars];exp];rest[args]]]

What’s interesting here is to note how Menard manages to introduce the same mistake McCarthy later fixes with his errata from March 23, 1959. What for McCarthy was a mere error addressed in less than ten days, for Menard ends up being a tour de force in authenticity.