Here is the link if you wish to download the LISP 1.5 Programmer's Manual: http://www.softwarepreservation.org/projects/LISP/book/LISP%...
I think it was page 13: http://www.softwarepreservation.org/projects/LISP/book/LISP%...
Where do you see that?
Looking at the "Universal LISP function" on page 13 in , the case for apply/LAMBDA just extends the current environment a with the arguments of the lambda, but it doesn't unpack a closure to get the environment the lambda function was defined in, so it implements the dynamic version. (Unlike, e.g., the interpreter in SICP .)
The Lisp 1.5 Programmer's Manual listed by Kay is available for download from the Computer Museum archives .
More Lisp fun .
A PDF version of the first recommended book Lisp 1.5 Programmer's Manual:
Lisp in 1962 did it, it had a compiler and the implementation could mix interpreted and compiled code.
One takes an interpreted function, which can be defined at runtime, compile it to assembler and have the assembler generate machine code in binary program space. The Lisp system then notes that this is now a compiled function.
> The LISP Compiler is a program written in LISP that translates S-expression definitions of functions into machine language subroutines. It is an optional feature that makes programs run many times faster than they would if they were to be interpreted at run time by the interpreter.
> When the compiler is called upon to compile a function, it looks for an EXPR or FEXPR on the property list of the function name. The compiler then translates this S-expression into an S-expression that represents a subroutine in the LISP Assembly Language (LAP). LAP then proceeds to assemble this program into binary program space. Thus an EXPR, or an FEXPR, has been changed to a SUBR or an FSUBR, respectively.
> 1. It is not necessary to compile all of the functions that are used in a particular run. The interpreter is designed to link with compiled functions. Compiled functions that use interpreted functions will call the interpreter to evaluate these at run time.
> 2. The order in which functions are compiled is of no significance. It is not even necessary to have all of the functions defined until they are actually used at run time. (Specialforms are an exception to this rule. They must be defined before any function that calls them is compiled. )
I thought this was going to be about C++
However, this little language looks a lot like Joy (which I suspect was named ironically).
On a serious note, I'd be more curious to see alternative syntax for Lisp (please, I know about code as data etc). McCarty envisioned M-expressions , but I have never seen anyone implement them or even nicer ones.
Preformatted text on HN is really hard to read on mobile. Reformatted:
(SF) If nothing else, Lisp was carefully defined in terms of Lisp.
(AK) 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.
Page 13 of that manual is page 21 of this PDF: http://www.softwarepreservation.org/projects/LISP/book/LISP%...
McCarthy and his team published a lot of stuff. As for Python, Lisp was defined together with a reference implementation.
See the Lisp 1 programmer's manual from 1960:
This was then expanded into Lisp 1.5: