As for the 1960 code in the manual, no, that wasn't the source code used by the first Lisp implementation.
In the Shen case, I assume you're talking about things like this, in primitives.lsp?
(DEFUN eval-kl (X)
(LET ((E (EVAL (shen.kl-to-lisp NIL X))))
(IF (AND (CONSP X) (EQ (CAR X) 'defun))
(COMPILE E)
E)))
What I see here: - Indentation to show structure;
- DEFUN;
- ';
- IF;
- LET;
- some lowercase letters.
To me, that looks a lot like the modern Clojure code, and not much like the 1962 code.Your taxonomy of immutability and persistence is interesting; thank you. I thought you might have meant that Clojure lists were automatically serialized to stable storage on, for example, program exit. Lisp lists have always been persistent, then, except when you mutate them? Because you can make your (f o o 1 b a r) from (f o o b a r) without copying the whole thing in any Lisp.
Lots of Lisps have been backwards-incompatible with previous Lisps. Scheme, Common Lisp, Emacs Lisp, and even MACLISP and LISP 1.5 were all significantly backwards-incompatible with their predecessors. That didn't make them non-Lisp. Common Lisp was not the end of Lisp development.