> *"The Law of Car: The primitive car is defined only for non-empty lists."*
/plugin marketplace add plurigrid/asi/plugin install asi-skills@asi-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
"The Law of Car: The primitive car is defined only for non-empty lists." — Friedman & Felleisen
The Friedman/Felleisen pedagogical tradition: learn by asking questions, build understanding through recursion.
The "Little" book series by Daniel P. Friedman and collaborators teaches programming through Socratic dialogue—questions and answers that build understanding layer by layer, like peeling an onion.
Authors: Daniel P. Friedman, Matthias Felleisen Focus: Original LISP foundations
The precursor—introduced the Q&A pedagogical style.
Authors: Daniel P. Friedman, Matthias Felleisen Foreword: Gerald Jay Sussman Focus: Recursive thinking and the nature of computation
Ten Commandments + Five Laws:
Key concepts: atom?, lat?, recursion, cond, the Y combinator
Authors: Daniel P. Friedman, Matthias Felleisen Focus: Continuations, state, and the nature of computation
Nineteen Commandments extending the original ten:
Key concepts: letcc, try, collectors, the Y! combinator
Authors: Daniel P. Friedman, William E. Byrd, Oleg Kiselyov Focus: Logic programming in Scheme (miniKanren)
Introduces relational programming:
run, fresh, conde, ==Key concepts: miniKanren, defrel, appendo, relational arithmetic
Authors: Matthias Felleisen, Daniel P. Friedman Focus: Visitor pattern and OO design in Java
Pizza → Java translation of Schemer concepts:
Authors: Matthias Felleisen, Daniel P. Friedman Focus: Type systems and ML
Types as contracts:
Authors: Daniel P. Friedman, Carl Eastlund Focus: Inductive proofs with ACL2/J-Bob
Total functions and induction:
defun with terminationdethm for theoremsKey concepts: J-Bob theorem prover, inductive proofs, totality
Authors: Daniel P. Friedman, David Thrane Christiansen Foreword: Robert Harper Focus: Dependent types with Pie
Types as propositions:
Π (Pi) and Σ (Sigma) types= (equality types)ind-Nat (induction principle)Key concepts: Pie language, Curry-Howard, normalization
Authors: Daniel P. Friedman, Anurag Mendhekar Focus: Deep learning from first principles
Tensors and gradients:
Key concepts: Malt DSL, backpropagation, gradient descent
Authors: Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi Focus: Systematic program design
Design recipes:
Authors: Daniel P. Friedman, Mitchell Wand Focus: Interpreters and language implementation
Chapters: Expressions, environment-passing, continuation-passing, types, modules, objects
Authors: Matthias Felleisen, Robert Bruce Findler, Matthew Flatt Focus: Operational semantics modeling
Reduction semantics, context-sensitive rewriting, testing language definitions
Authors: Chris Hanson, Gerald Jay Sussman Focus: Extensible systems design
Continuations of SICP's spirit: combinators, generic operations, propagators
MINUS (-1): Little LISPer, A Little Java, Little Typer, Software Design
ERGODIC (0): Seasoned Schemer, Little MLer, Little Learner, Semantics Engineering
PLUS (+1): Little Schemer, Reasoned Schemer, Little Prover, HtDP, EOPL
Total: 12 books, balanced across GF(3)
All books follow the "onion" structure:
(define learning
(lambda (concept)
(cond
((atom? concept) (ask-question concept))
(else
(cons (learning (car concept))
(learning (cdr concept)))))))
Each chapter builds on the previous, with questions that:
| Little Schemer | SICP |
|---|---|
| Chapter 9 (Y combinator) | 4.1 (Metacircular evaluator) |
| Chapter 10 (collector) | 3.5 (Streams) |
| Seasoned Ch. 13 (letcc) | 4.3 (amb evaluator) |
| Reasoned (miniKanren) | 4.4 (Logic programming) |
| Little Typer (Pie) | — (beyond SICP scope) |
| Little Learner | — (modern ML) |
The recursive substitution rules in hat_spectre.rs mirror the Little Schemer's approach:
// Metatile substitution ≈ recursive list processing
fn substitute(metatile: MetatileType, depth: usize) -> Vec<MetatileType> {
if depth == 0 {
return vec![metatile]; // Base case (atom?)
}
let children = match metatile { ... }; // Recursive case
children.into_iter()
.flat_map(|m| substitute(m, depth - 1))
.collect()
}
# Run Scheme REPL with Little Schemer exercises
chez-scheme --libdirs lib/scheme
# miniKanren for Reasoned Schemer
(import (minikanren))
(run* (q) (appendo '(a b) '(c d) q))
# Pie for Little Typer
pie repl
# Malt for Little Learner
racket -l malt