Lisp in Small Pieces
This is a comprehensive account of the semantics and the implementation of the whole Lisp family of languages, namely Lisp, Scheme and related dialects. It describes 11 interpreters and 2 compilers, including very recent techniques of interpretation and compilation. The book is in two parts. The first starts from a simple evaluation function and enriches it with multiple name spaces, continuations and side-effects with commented variants, while at the same time the language used to define these features is reduced to a simple lambda-calculus. Denotational semantics is then naturally introduced. The second part focuses more on implementation techniques and discusses precompilation for fast interpretation: threaded code or bytecode; compilation towards C. Some extensions are also described such as dynamic evaluation, reflection, macros and objects. This will become the new standard reference for people wanting to know more about the Lisp family of languages: how they work, how they are implemented, what their variants are and why such variants exist. The full code is supplied (and also available over the Net). A large bibliography is given as well as a considerable number of exercises. Thus it may also be used by students to accompany second courses on Lisp or Scheme.
What people are saying - Write a review
We haven't found any reviews in the usual places.
The Basics of Interpretation
Lisp 1 2 w
Assignment and Side Effects
A-calculus activation record allocate args arguments arity+1 assignment associated Bigloo binding body Boolean byte-code caddr cadr call/cc car and cdr cddr closure Common Lisp compiler computation cond cons continuation created define define-abbreviation define-class define-instruction define-method define-syntax definition defprimitive denotation denotational semantics denv dotted pairs dynamic binding dynamic variables env fenv error EuLisp eval eval/ce evaluate example execution Exercise expander expression exps fact fields free variables functional application Functional Programming global environment global variable handler implementation initial instructions interpreter invoke language letrec lexical environment lookup loop macro expansion meaning memory Meroonet modify object offset predefined pretreatment problem program counter PUSH-VALUE quotation recursive result S-expression Scheme semantics set-cdr signal-exception special form stack stack-pop symbol syntactic syntax syntax-rules tail tail recursion toplevel transformation vector vector-ref wrong Incorrect arity