Software Design for Flexibility
Find a file
2021-03-30 14:08:34 +02:00
abstracting-a-domain seed 2021-03-30 14:08:34 +02:00
automatic-differentiation seed 2021-03-30 14:08:34 +02:00
combinators seed 2021-03-30 14:08:34 +02:00
combining-arithmetics seed 2021-03-30 14:08:34 +02:00
common seed 2021-03-30 14:08:34 +02:00
compiling-to-execution-procedures seed 2021-03-30 14:08:34 +02:00
continuations seed 2021-03-30 14:08:34 +02:00
continuations-to-amb seed 2021-03-30 14:08:34 +02:00
dependencies seed 2021-03-30 14:08:34 +02:00
design-of-the-matcher seed 2021-03-30 14:08:34 +02:00
efficient-generic-procedures seed 2021-03-30 14:08:34 +02:00
exploratory-behavior seed 2021-03-30 14:08:34 +02:00
generic-interpreter seed 2021-03-30 14:08:34 +02:00
generic-procedures seed 2021-03-30 14:08:34 +02:00
layers seed 2021-03-30 14:08:34 +02:00
manager seed 2021-03-30 14:08:34 +02:00
non-strict-arguments seed 2021-03-30 14:08:34 +02:00
pattern-matching-on-graphs seed 2021-03-30 14:08:34 +02:00
propagation seed 2021-03-30 14:08:34 +02:00
regular-expressions seed 2021-03-30 14:08:34 +02:00
term-rewriting seed 2021-03-30 14:08:34 +02:00
unification seed 2021-03-30 14:08:34 +02:00
user-defined-types seed 2021-03-30 14:08:34 +02:00
wrappers seed 2021-03-30 14:08:34 +02:00
COPYING seed 2021-03-30 14:08:34 +02:00
README.org seed 2021-03-30 14:08:34 +02:00

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 books 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 books 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

Pattern Matching

Evaluation

Layering

Propagation