Software Design for Flexibility
How to Avoid Programming Yourself into a Corner
ISBN: | Copyright 2021
Instructor Requests
| Expand/Collapse All | |
|---|---|
| Contents (pg. vii) | |
| Foreword (pg. xi) | |
| Preface (pg. xiii) | |
| Acknowledgements (pg. xix) | |
| 1 Flexibility in Nature and in Design (pg. 1) | |
| 1.1 Architecture of computation (pg. 5) | |
| 1.2 Smart parts for flexibilty (pg. 7) | |
| 1.3 Redundancy and degeneracy (pg. 12) | |
| 1.4 Exploratory behavior (pg. 14) | |
| 1.5 The cost of flexibility (pg. 17) | |
| 2 Domain-Specific Languages (pg. 21) | |
| 2.1 Combinators (pg. 22) | |
| 2.2 Regular expressions (pg. 37) | |
| 2.3 Wrappers (pg. 46) | |
| 2.4 Abstracting a domain (pg. 52) | |
| 2.5 Summary (pg. 64) | |
| 3 Variations on an Arithmetic Theme (pg. 67) | |
| 3.1 Combining arithmetics (pg. 67) | |
| 3.2 Extensible generic procedures (pg. 87) | |
| 3.3 Example: Automatic differentiation (pg. 103) | |
| 3.4 Efficient generic procedures (pg. 125) | |
| 3.5 Efficient user-defined types (pg. 132) | |
| 3.6 Summary (pg. 154) | |
| 4 Pattern Matching (pg. 157) | |
| 4.1 Patterns (pg. 158) | |
| 4.2 Term rewriting (pg. 160) | |
| 4.3 Design of the matcher (pg. 170) | |
| 4.4 Unification match (pg. 183) | |
| 4.5 Pattern matching on graphs (pg. 209) | |
| 4.6 Summary (pg. 231) | |
| 5 Evaluation (pg. 233) | |
| 5.1 Generic eval/apply interpreter (pg. 234) | |
| 5.2 Procedures with non-strict arguments (pg. 250) | |
| 5.3 Compiling to execution procedures (pg. 259) | |
| 5.4 Exploratory behavior (pg. 269) | |
| 5.5 Exposing the underlying continuations (pg. 280) | |
| 5.6 Power and responsibility (pg. 296) | |
| 6 Layering (pg. 299) | |
| 6.1 Using layers (pg. 300) | |
| 6.2 Implementation of layering (pg. 301) | |
| 6.3 Layered arithmetic (pg. 309) | |
| 6.4 Annotating values with dependencies (pg. 315) | |
| 6.5 The promise of layering (pg. 323) | |
| 7 Propagation (pg. 327) | |
| 7.1 An example: Distances to stars (pg. 329) | |
| 7.2 The propagation mechanism (pg. 342) | |
| 7.3 Multiple alternative world views (pg. 349) | |
| 7.4 Merging values (pg. 351) | |
| 7.5 Searching possible worlds (pg. 355) | |
| 7.6 Propagation enables degeneracy (pg. 369) | |
| 8 Epilogue (pg. 373) | |
| A Appendix: Supporting Software (pg. 377) | |
| B Appendix: Scheme (pg. 379) | |
| References (pg. 399) | |
| Index (pg. 409) | |
| List of Exercises (pg. 425) | |
|
eTextbook
Go paperless today! Available online anytime, nothing to download or install.
|