abstracting-a-domain | ||
automatic-differentiation | ||
combinators | ||
combining-arithmetics | ||
common | ||
compiling-to-execution-procedures | ||
continuations | ||
continuations-to-amb | ||
dependencies | ||
design-of-the-matcher | ||
efficient-generic-procedures | ||
exploratory-behavior | ||
generic-interpreter | ||
generic-procedures | ||
layers | ||
manager | ||
non-strict-arguments | ||
pattern-matching-on-graphs | ||
propagation | ||
regular-expressions | ||
term-rewriting | ||
unification | ||
user-defined-types | ||
wrappers | ||
COPYING | ||
README.org |
This repo contains the SDF software (downloaded from csail) supporting the book Software Design for Flexibility by Chris Hanson and Gerald Jay Sussman. ISBN 9780262045490
We have all spent too much time trying to deform an old piece of code so that it could be used in a way that we didn't realize would be needed when we wrote it. This is a terrible waste of time and effort. Unfortunately, there are many pressures on us to write code that works very well for a very specific purpose, with few reusable parts. But we think that this is not necessary. —Chris Hanson and Gerald Jay Sussman
Getting started
The book’s software is designed to be run using MIT/GNU Scheme however many of the examples will work unchanged with other implementations.
There is a management tool “to help one use the associated software. For example, it simplifies the job of loading the software needed to reproduce the examples in the book and to support the solution of the book’s exercises.” details can be found in the manual.
load "manager/load") (
(manage 'help)
(manage 'new-environment 'combinators)
Flexibility in Nature and in Design
Domain-Specific Languages
Variations on an Arithmetic Theme
- file:generic-procedures
- file:efficient-generic-procedures
- file:combining-arithmetics
- file:automatic-differentiation
- file:user-defined-types
Pattern Matching
Evaluation
- file:compiling-to-execution-procedures
- file:generic-interpreter
- file:continuations
- file:continuations-to-amb
- file:exploratory-behavior
- file:non-strict-arguments