Lisp from Nothing, Second Edition
Lisp syntax, parentheses, and alternatives
- Several comments discuss discomfort with traditional S-expressions and experiments to make Lisp look less alien (e.g., alternative tuple notations, reducing visible parentheses).
- Others argue parentheses are a feature: they enable powerful structural editing and code-as-data manipulation; attempts to “fix” the syntax (M-expressions, Dylan, “sweet expressions”) never really stuck.
- Racket and Clojure are highlighted as good compromises: using different brackets for different structures (vectors, maps, bindings) improves visual parsing and reduces clutter.
- Debate around R6RS making
[interchangeable with(: some like the visual help; others feel it wastes the chance to give[]a distinct meaning (e.g., vectors). - Removing parentheses from
let/condpairs is seen by some as reducing noise, by others as harming structural editing and clarity with multi-form clauses.
Functional style, data structures, and evaluation
- One subthread contrasts deeply nested function calls with step-by-step imperative style and pipeline/arrow notation; people note that comfort is mostly a matter of habit.
- Another subthread discusses applicative (functional) vs imperative styles: lists are great for functional updates but weaker for indexing, appending, and map lookups, pushing many Lisps toward vectors/hash tables.
- Clojure’s HAMT-based structures are credited with making purely applicative code more practical.
- There is a short critique of the Church-encoded list implementation in the book’s
church.scm, suggesting a more compact representation with fewer booleans.
Lambda calculus vs Lisp, and metacircular evaluators
- One comment clarifies: lambda calculus corresponds to Lisp’s lexical lambda without explicit environments; environments are an implementation detail to avoid textual substitution.
- Metacircular evaluators are defended as central because they vividly demonstrate “code as data,” and give a compact, almost axiomatic description of a language, likened to Maxwell’s equations for electromagnetism.
- There is interest in whether an even more compact, unified representation of
evalis possible; an example from binary lambda calculus is mentioned as a very terse self-interpreter.
Author, book scope, and related works
- Multiple readers praise the author’s previous books (especially Scheme 9 from Empty Space and Practical Compiler Construction) for clarity, brevity, and beauty, treating them as almost poetic “lifetime projects” rather than purely practical manuals.
- The author confirms this: motivation is to create something personally beautiful and to transmit knowledge in a digestible way; also comments on a simple, modest lifestyle influenced by contemplative practice.
- The title “Lisp from Nothing” is clarified as “from scratch / from a minimal base,” not a beginner intro. It focuses on bootstrapping early Lisp rather than teaching Lisp from zero.
- For newcomers, commenters recommend other Lisp/Scheme introductions first: ANSI Common Lisp, How to Design Programs, The Little Schemer series, A Gentle Introduction to Symbolic Computation, Successful Lisp, plus classic papers like “Roots of Lisp.”
Usefulness, minimalism, and standard libraries
- One critic questions the point of yet another minimal language without a standard library or syscall interface.
- Others respond that the goal here is not application-level usefulness but understanding the essence of computation and language implementation—more like art or conceptual exploration than product engineering.
Miscellaneous reactions
- Several people immediately purchase the new edition and other books after browsing the site; the bibliography and essays (especially on philosophy and “who am I?”) are described as delightful.
- The “no AI” badge on the back cover is noted as ironic given Lisp’s historical link to AI; commenters interpret it as “no generative AI used,” sometimes joking that no AI was harmed—or harming the planet—in making the book.