The University of Melbourne
Alan Kay: Yes, that was the big revelation to me when I was in graduate school—when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself. These were “Maxwell’s Equations of Software!” This is the whole world of programming in a few lines that I can put my hand over. (Feldman 2004, 26)

\[ \nabla \cdot \mathbf{E} = \frac{\rho}{\varepsilon_0} \tag{1}\] \[ \nabla \cdot \mathbf{B} = 0 \tag{2}\] \[ \nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t} \tag{3}\] \[ \nabla \times \mathbf{B} = \mu_0 \left(\mathbf{J} + \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t} \right) \tag{4}\]
apply[fn x a] =
[atom[fn] → [eq[fn CAR] → caar[x];
eq{fn CDR] → cdar[x];
eq[fn CONS] → cons{car[x] cadr[x]];
eq[fn ATOM] → atom{car[x]];
eq[fn EQ] → eq[car[x] cadr[x]];
T apply[eval[fn a] x a]];
eq[car[fn] LAMBDA] → eval[caddr[fn] pairlis[cadr[fn] x a]];
eq[car[fn] LABEL] → apply[caddr[fn] X cons[cons[cadr[fn];
caddr[fnj] a]]]
eval[e a] = [atom[e] → cdr[assoc[e a]];
atom[car[e]] →
[eq[car[e]QUOTE] → cadr[e];
eq[car{e] COND] → evcon[cdr[e] a];
T → apply[car[e] evlis[cdr[e] a] a]];
T → apply[car[e] evlis[cdr[e] a] a]]The metacircular wizard from the cover of Structure and Interpretation of Comptuer Programs by Abelson, Sussman, and Sussman (1996)
An analogous double-entendre can happen with LISP programs that are designed to reach in and change their own structure. If you look at them on the LISP level, you will say that they change themselves; but if you shift levels, and think of LISP programs as data to the LISP interpreter […], then in fact the sole program that is running is the interpreter, and the changes being made are merely changes in the data. (Hofstadter 1999, 692)

JavaScript is the first lambda language to go mainstream. Deep down, JavaScript has more in common with Lisp and Scheme than with Java. It is Lisp in C’s clothing. This makes JavaScript a remarkably powerful language. (Crockford 2008)