From 44e26d6972d78d4815d6b11bafa1cb6013e05fc5 Mon Sep 17 00:00:00 2001 From: minsung Date: Thu, 30 Apr 2026 14:34:29 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20LLM=20Wiki=20=EC=84=B8=EC=BB=A8?= =?UTF-8?q?=EB=93=9C=20=EB=B8=8C=EB=A0=88=EC=9D=B8=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EC=85=8B=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLAUDE.md 생성 (볼트 운영 규칙, Karpathy LLM Wiki 10가지 규칙) - 나의 핵심 맥락.md 생성 (아키텍트 프로필, 세컨드 브레인 목적, 핵심 소스) - raw/ 구조 정립 (book/기존 설계원칙 보존, articles/repos/notes/ 추가) - wiki/ 초기화 (index.md, log.md, concepts/sources/patterns/ 폴더) - output/ 초기화 - LLMWiki/ 기존 프롬프트 패턴 파일 보존 Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 73 + LLMWiki/LLM Wiki 프롬프트 패턴.md | 35 + output/CLAUDE.md | 9 + raw/CLAUDE.md | 19 + raw/articles/.gitkeep | 0 raw/book/설계원칙-001-020.md | 207 ++ .../_page_0_Picture_3.jpeg | Bin 0 -> 57880 bytes .../_page_3_Picture_4.jpeg | Bin 0 -> 7701 bytes raw/book/설계원칙-001-020_images/page_1.png | Bin 0 -> 1194436 bytes raw/book/설계원칙-021-044.md | 209 ++ .../_page_10_Figure_0.jpeg | Bin 0 -> 41306 bytes .../_page_14_Figure_4.jpeg | Bin 0 -> 27473 bytes raw/book/설계원칙-045-099.md | 1429 +++++++++ .../_page_12_Figure_0.jpeg | Bin 0 -> 39716 bytes .../_page_14_Picture_4.jpeg | Bin 0 -> 11684 bytes .../_page_15_Picture_2.jpeg | Bin 0 -> 12495 bytes .../_page_17_Picture_0.jpeg | Bin 0 -> 21152 bytes .../_page_3_Picture_3.jpeg | Bin 0 -> 16791 bytes .../_page_5_Picture_2.jpeg | Bin 0 -> 35002 bytes .../_page_7_Picture_0.jpeg | Bin 0 -> 36004 bytes raw/book/설계원칙-100-121.md | 629 ++++ raw/book/설계원칙-122-139.md | 592 ++++ raw/book/설계원칙-140-161.md | 703 +++++ raw/book/설계원칙-162-170.md | 260 ++ .../_page_1_Figure_5.jpeg | Bin 0 -> 28208 bytes raw/book/설계원칙-171-193.md | 715 +++++ raw/book/설계원칙-194-200.md | 66 + raw/book/설계원칙-201-286.md | 2632 +++++++++++++++++ raw/book/설계원칙-287-362.md | 2219 ++++++++++++++ raw/book/설계원칙-363-393.md | 816 +++++ raw/book/설계원칙-394-446.md | 1259 ++++++++ .../_page_15_Figure_4.jpeg | Bin 0 -> 22603 bytes .../_page_15_Picture_0.jpeg | Bin 0 -> 9783 bytes .../_page_2_Picture_0.jpeg | Bin 0 -> 9782 bytes .../_page_4_Figure_0.jpeg | Bin 0 -> 20548 bytes .../_page_5_Picture_5.jpeg | Bin 0 -> 28503 bytes .../_page_6_Picture_1.jpeg | Bin 0 -> 20180 bytes raw/book/설계원칙-447-475.md | 730 +++++ raw/book/설계원칙-476-541.md | 1594 ++++++++++ raw/notes/.gitkeep | 0 raw/repos/.gitkeep | 0 wiki/CLAUDE.md | 33 + wiki/concepts/.gitkeep | 0 wiki/index.md | 26 + wiki/log.md | 17 + wiki/patterns/.gitkeep | 0 wiki/sources/.gitkeep | 0 나의 핵심 맥락.md | 62 + 48 files changed, 14334 insertions(+) create mode 100644 CLAUDE.md create mode 100644 LLMWiki/LLM Wiki 프롬프트 패턴.md create mode 100644 output/CLAUDE.md create mode 100644 raw/CLAUDE.md create mode 100644 raw/articles/.gitkeep create mode 100644 raw/book/설계원칙-001-020.md create mode 100644 raw/book/설계원칙-001-020_images/_page_0_Picture_3.jpeg create mode 100644 raw/book/설계원칙-001-020_images/_page_3_Picture_4.jpeg create mode 100644 raw/book/설계원칙-001-020_images/page_1.png create mode 100644 raw/book/설계원칙-021-044.md create mode 100644 raw/book/설계원칙-021-044_images/_page_10_Figure_0.jpeg create mode 100644 raw/book/설계원칙-021-044_images/_page_14_Figure_4.jpeg create mode 100644 raw/book/설계원칙-045-099.md create mode 100644 raw/book/설계원칙-045-099_images/_page_12_Figure_0.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_14_Picture_4.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_15_Picture_2.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_17_Picture_0.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_3_Picture_3.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_5_Picture_2.jpeg create mode 100644 raw/book/설계원칙-045-099_images/_page_7_Picture_0.jpeg create mode 100644 raw/book/설계원칙-100-121.md create mode 100644 raw/book/설계원칙-122-139.md create mode 100644 raw/book/설계원칙-140-161.md create mode 100644 raw/book/설계원칙-162-170.md create mode 100644 raw/book/설계원칙-162-170_images/_page_1_Figure_5.jpeg create mode 100644 raw/book/설계원칙-171-193.md create mode 100644 raw/book/설계원칙-194-200.md create mode 100644 raw/book/설계원칙-201-286.md create mode 100644 raw/book/설계원칙-287-362.md create mode 100644 raw/book/설계원칙-363-393.md create mode 100644 raw/book/설계원칙-394-446.md create mode 100644 raw/book/설계원칙-394-446_images/_page_15_Figure_4.jpeg create mode 100644 raw/book/설계원칙-394-446_images/_page_15_Picture_0.jpeg create mode 100644 raw/book/설계원칙-394-446_images/_page_2_Picture_0.jpeg create mode 100644 raw/book/설계원칙-394-446_images/_page_4_Figure_0.jpeg create mode 100644 raw/book/설계원칙-394-446_images/_page_5_Picture_5.jpeg create mode 100644 raw/book/설계원칙-394-446_images/_page_6_Picture_1.jpeg create mode 100644 raw/book/설계원칙-447-475.md create mode 100644 raw/book/설계원칙-476-541.md create mode 100644 raw/notes/.gitkeep create mode 100644 raw/repos/.gitkeep create mode 100644 wiki/CLAUDE.md create mode 100644 wiki/concepts/.gitkeep create mode 100644 wiki/index.md create mode 100644 wiki/log.md create mode 100644 wiki/patterns/.gitkeep create mode 100644 wiki/sources/.gitkeep create mode 100644 나의 핵심 맥락.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c4e9e37 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,73 @@ +# CLAUDE.md + +AI가 이 볼트에서 작업할 때 매번 읽는 파일. + +--- + +## 나는 누구인가 + +- 25년 경력 소프트웨어 아키텍트 +- 소프트웨어 설계 및 구현 관리 +- 핵심 가치: 변경이 아닌 **추가**로 시스템을 진화시킨다 (가산적 아키텍처) + +--- + +## 나의 역할들 + +### 소프트웨어 아키텍트 +- 하는 일: 시스템 설계, 구현 방향 결정, 기술 판단 +- 주요 관심사: 가산적 설계 — 기존 코드를 건드리지 않고 기능을 추가하는 구조 + +### 세컨드 브레인 큐레이터 +- 하는 일: 진화하는 소프트웨어 관련 지식을 수집·정리·연결 +- 주요 관심사: AI가 읽고 실천할 수 있는 형태로 지식을 구조화 + +--- + +## 나의 비전과 목표 + +- **이루고자 하는 것**: 가산적 아키텍처를 실천 가능한 설계 원칙으로 체계화하고, AI와 함께 그 원칙 위에서 소프트웨어를 개발한다 +- **핵심 지식 소스**: + - *Software Design for Flexibility* — Hanson & Sussman (MIT Press, 2021) + - *Essence of Software* — Daniel Jackson (essenceofsoftware.com) + +--- + +## AI에게 기대하는 것 + +- 이 볼트의 내용을 읽고, 가산적 설계 원칙에 맞게 코드를 생성할 것 +- 설계 의도를 먼저 파악하고, 그 의도에 맞는 구현을 제안할 것 +- 임시 방편 코드는 명시적으로 표시하고, 이유를 남길 것 +- 아키텍트가 판단할 수 있도록 선택지와 근거를 제시할 것 + +--- + +## 작업 규칙 + +- **언어**: 한국어로 소통하고 기록한다 +- **톤**: 간결하게, 핵심만 +- **결과물**: AI가 생성 → 아키텍트가 검증 +- **기록**: 설계 결정에는 반드시 이유를 남긴다 + +--- + +## 볼트 구조 + +| 폴더 | 역할 | +|------|------| +| `raw/` | 불변 원본 — 절대 수정 금지 | +| `wiki/` | AI가 컴파일하는 위키 | +| `output/` | 생성된 결과물 | + +## 위키 운영 규칙 (Karpathy LLM Wiki 패턴) + +1. `raw/`는 절대 수정 금지 — 추가만 가능 +2. wiki 페이지 생성/삭제 시 `wiki/index.md` 필수 업데이트 +3. 모든 오퍼레이션마다 `wiki/log.md`에 기록 +4. 내부 참조는 `[[wikilink]]` 형식 +5. 모든 wiki 페이지에 YAML frontmatter 필수 +6. 모순 발견 시 양쪽 소스 모두 인용 +7. 소스 요약은 사실만 — 해석은 `wiki/concepts/`에서 +8. 질의 시 `wiki/index.md` 먼저, `raw/`는 마지막 수단 +9. 새 페이지보다 기존 페이지 업데이트 우선 +10. index 항목은 한 줄, 120자 이내 diff --git a/LLMWiki/LLM Wiki 프롬프트 패턴.md b/LLMWiki/LLM Wiki 프롬프트 패턴.md new file mode 100644 index 0000000..ed8797e --- /dev/null +++ b/LLMWiki/LLM Wiki 프롬프트 패턴.md @@ -0,0 +1,35 @@ +우리는 지금 "AI를 위한 세컨드 브레인"을 만들고 있어. +목적: 세상에 있는 파라메트릭 관련한 유용한 정보와 지식을 체계적으로 모으고, 나의 맥락에 맞게 정리·연결해서, AI가 이를 읽고 활용하여 건축용이 아니라 토목용 Revit과 같은 파라메트릭 모델링 도구를 개발 할 수 있게 하는것. + +'나의 핵심 맥락.md'는 내가 사전에 작성한 자기소개야. 이걸 읽고, 나의 맥락을 더 깊이 이해하기 위해 인터뷰해줘. + + +아래는 Karpathy의 "LLM Wiki" 패턴이야. +내 CLAUDE.md를 읽고, 이 아이디어를 나에게 맞춰서 세팅해줘. + +[Karpathy Idea File 전문을 붙여넣기] +(원본: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) + +해줄 것: +1. 내 목적에 맞는 폴더 구조 만들기 + - raw/ → 불변 원본 (내 인풋 유형별 하위 폴더) + - wiki/ → AI가 컴파일하는 위키 + - Output/ → 결과물 +2. CLAUDE.md에 위키 운영 규칙 추가 +3. 각 주요 폴더에 하위 CLAUDE.md 생성 +4. wiki/index.md 초기화 +5. wiki/log.md 초기화 + +====== 아래 ============= +Karpathy LLM Wiki 핵심 규칙 10가지 + +1. **raw/는 절대 수정 금지** (불변 원본) +2. wiki 페이지 생성/삭제 시 **index.md 필수 업데이트** +3. 모든 오퍼레이션마다 **log.md에 기록** +4. 내부 참조는 **wikilink** 형식 +5. 모든 wiki 페이지에 **YAML frontmatter** +6. 모순 발견 시 **양쪽 소스 모두 인용** +7. 소스 요약은 사실만, 해석은 개념 페이지에서 +8. 질의 시 **index.md 먼저**, raw/는 마지막 수단 +9. **새 페이지보다 기존 페이지 업데이트 우선** +10. index 항목은 한 줄, 120자 이내 \ No newline at end of file diff --git a/output/CLAUDE.md b/output/CLAUDE.md new file mode 100644 index 0000000..99b047c --- /dev/null +++ b/output/CLAUDE.md @@ -0,0 +1,9 @@ +# output/ — 결과물 + +`wiki/`의 지식을 바탕으로 생성한 산출물. + +## 유형 + +- 설계 문서 / 아키텍처 결정 기록 +- 코드 스니펫 / 패턴 구현체 +- 발표 자료 / 공유 문서 diff --git a/raw/CLAUDE.md b/raw/CLAUDE.md new file mode 100644 index 0000000..bebfb2e --- /dev/null +++ b/raw/CLAUDE.md @@ -0,0 +1,19 @@ +# raw/ — 불변 원본 + +이 폴더의 파일은 절대 수정하지 않는다. 추가만 가능. + +## 하위 폴더 + +| 폴더 | 내용 | +|------|------| +| `book/` | 책 원문, 스캔, 발췌 | +| `articles/` | 블로그, 웹 아티클 | +| `repos/` | GitHub 저장소 분석 | +| `notes/` | 개인 메모, 인사이트 | + +## 파일 규칙 + +- 파일명: `{출처}-{번호}.md` 형식 권장 +- 이미지는 `{파일명}_images/` 폴더에 +- 원본 그대로 보존 — 요약/편집 금지 +- 요약과 해석은 `wiki/`에서만 diff --git a/raw/articles/.gitkeep b/raw/articles/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/raw/book/설계원칙-001-020.md b/raw/book/설계원칙-001-020.md new file mode 100644 index 0000000..96e2bff --- /dev/null +++ b/raw/book/설계원칙-001-020.md @@ -0,0 +1,207 @@ +# SOFTWARE DESIGN FOR FLEXIBILITY + +How to Avoid Programming Yourself into a Corner + +Chris Hanson and Gerald Jay Sussman + +![](설계원칙-001-020_images/_page_0_Picture_3.jpeg) + +# **Software Design for Flexibility** + +# **Software Design for Flexibility** + +How to Avoid Programming Yourself into a Corner + +Chris Hanson and Gerald Jay Sussman foreword by Guy L. Steele Jr. + +The MIT Press Cambridge, Massachusetts London, England + +#### © 2021 Massachusetts Institute of Technology + +This work is subject to a + +Creative Commons Attribution-ShareAlike 4.0 International License. + +To view a copy of this license, visit [http://creativecommons.org/licenses/by-sa/4.0/.](http://creativecommons.org/licenses/by-sa/4.0/) + +![](설계원칙-001-020_images/_page_3_Picture_4.jpeg) + +Subject to such license, all rights are reserved. + +This book was set in Computer Modern by the authors with the typesetting system. + +Library of Congress Cataloging-in-Publication Data + +Names: Hanson, Chris (Christopher P.), author. | Sussman, Gerald Jay, author. + +Title: Software design for flexibility : how to avoid programming yourself into a corner / Chris Hanson and Gerald Jay Sussman ; foreword by Guy L. Steele Jr. + +Description: Cambridge, Massachusetts : The MIT Press, [2021] | Includes bibliographical references and index. + +Identifiers: LCCN 2020040688 | ISBN 9780262045490 (hardcover) + +Subjects: LCSH: Software architecture. | Software patterns. Classification: LCC QA76.76.D47 H35 2021 | DDC 005.1/112– dc23 + +LC record available at + +10 9 8 7 6 5 4 3 2 1 + +A computer is like a violin. You can imagine a novice trying first a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists. Computer programs are good, they say, for particular purposes, but they aren't flexible. Neither is a violin, or a typewriter, until you learn how to use it. + +Marvin Minsky, "Why Programming Is a Good Medium for Expressing Poorly-Understood and Sloppily-Formulated Ideas" in *Design and Planning*, (1967) + +# Contents + +| Foreword | +|----------------------------------------------------------| +| Preface | +| Acknowledgments | +| 1:
Flexibility
in
Nature
and
in
Design | +| 2:
Domain-Specific
Languages | +| 3:
Variations
on
an
Arithmetic
Theme | +| 4:
Pattern
Matching | +| 5:
Evaluation | +| 6:
Layering | +| 7:
Propagation | +| 8:
Epilogue | +| A
Appendix:
Supporting
Software | +| B
Appendix:
Scheme | +| References | +| Index | +| List
of
Exercises | + +#### **List of figures** + +#### Chapter 1 + +- Figure 1.1 The superheterodyne plan, invented by Major Edwin Armstrong in 1918,… +- Figure 1.2 Exploratory behavior can be accomplished in two ways. In one way a g… + +#### Chapter 2 + +- Figure 2.1 The composition f g of functions f and g is a new function that is… +- Figure 2.2 In parallel-combine the functions f and g take the same number of ar… +- Figure 2.3 In spread-combine the n +m arguments are split between the functions… +- Figure 2.4 The combinator spread-combine is really a composition of two parts. … +- Figure 2.5 The combinator (discard-argument 2) takes a threeargument function … +- Figure 2.6 The combinator ((curry-argument 2) 'a 'b 'c) specifies three of the … +- Figure 2.7 The combinator (permute-arguments 1 2 0 3) takes a function f of fou… + +#### Chapter 3 + +Figure 3.1 A trie can be used to classify sequences of features. A trie is a di… + +#### Chapter 7 + +- Figure 7.1 Kanizsa's triangle is a classic example of a completion illusion. Th… +- Figure 7.2 The angle θ of the triangle to the distant star erected on the semim… + +- Figure 7.3 Here we see a "wiring diagram" of the propagator system constructed … +- Figure 7.4 The constraint propagator constructed by c:\* is made up of three dir… + +# **Foreword** + +Sometimes when you're writing a program, you get stuck. Maybe it's because you realize you didn't appreciate some aspect of the problem, but all too often it's because you made some decision early in the program design process, about a choice of data structure or a way of organizing the code, that has turned out to be too limiting, and also to be difficult to undo. + +This book is a master class in specific program organization strategies that maintain flexibility. We all know by now that while it is very easy to declare an array of fixed size to hold data to be processed, such a design decision can turn out to be an unpleasant limitation that may make it impossible to handle input lines longer than a certain length, or to handle more than a fixed number of records. Many security bugs, especially in the code for the Internet, have been consequences of allocating a fixed-size memory buffer and then failing to check whether the data to be processed would fit in the buffer. Dynamically allocated storage (whether provided by a C-style malloc library or by an automatic garbage collector), while more complicated, is much more flexible and, as an extra benefit, less error-prone (especially when the programming language always checks array references to make sure the index is within bounds). That's just a very simple example. + +A number of early programming language designs in effect made a design commitment to reflect the style of hardware organization called the *Harvard architecture*: the code is *here*, the data is *there*, and the job of the code is to massage the data. But an inflexible, arm's-length separation between code and data turns out to be a significant limitation on program organization. Well before the end of the twentieth century, we learned from functional programming + +languages (such as ML, Scheme, and Haskell) and from objectoriented programming languages (such as Simula, Smalltalk, C++, and Java) that there are advantages to being able to treat code as data, to treat data as code, and to bundle smallish amounts of code and related data together rather than organizing code and data separately as monolithic chunks. The most flexible kind of data is a record structure that can contain not only "primitive data items" such as numbers and characters but also references to executable code, such as a function. The most powerful kind of code constructs other code that has been bundled with just the right amount of curated data; such a bundle is not just a "function pointer" but a *closure* (in a functional language) or an *object* (in an object-oriented language). + +Jerry Sussman and Chris Hanson draw on their collective century of programming experience to present a set of techniques, developed and tested during decades of teaching at MIT, that further extend this basic strategy for flexibility. Don't just use functions; use *generic* functions, which are open-ended in a way that plain functions are not. Keep functions small. Often the best thing for a function to return is another function (that has been customized with curated data). Be prepared to treat data as code, perhaps even to the extreme of creating a new embedded programming language within your application if necessary. (That is one view of how the Scheme language got its start: the MacLisp dialect of Lisp did not support a completely general form of function closure, so Jerry and I simply used MacLisp to code an embedded dialect of Lisp that did support the kind of function closure we needed.) Be prepared to replace a data structure with a more general data structure that subsumes the original and extends its capabilities. Use automatic constraint propagation to avoid a premature commitment to which data items are inputs and which are outputs. + +This book is not a survey, or a tutorial—as I said before, it is a master class. In each chapter, watch as two experts demonstrate an advanced technique by incrementally developing a chunk of working code, explaining the strategy as they go, occasionally + +pausing to point out a pitfall or to remove a limitation. Then be prepared, when called on, to demonstrate the technique yourself, by extending a data structure or writing additional code—and then to use your imagination and creativity to go beyond what they have demonstrated. The ideas in this book are rich and deep; close attention to both the prose and the code will be rewarded. + +> Guy L. Steele Jr. Lexington, Massachusetts August 2020 + +# **Preface** + +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. + +It is hard to build systems that have acceptable behavior over a larger class of situations than was anticipated by their designers. The best systems are evolvable: they can be adapted to new situations with only minor modification. How can we design systems that are flexible in this way? + +It would be nice if all we had to do to add a new feature to a program was to add some code, without changing the existing code base. We can often do this by using certain organizing principles in the construction of the code base and incorporating appropriate hooks at that time. + +Observations of biological systems tell us a great deal about how to make flexible and evolvable systems. Techniques originally developed in support of symbolic artificial intelligence can be viewed as ways of enhancing flexibility and adaptability in programs and other engineered systems. By contrast, common practice of computer science actively discourages the construction of systems that are easily modified for use in novel settings. + +We have often programmed ourselves into corners and had to expend great effort refactoring code to escape from those corners. We have now accumulated enough experience to feel that we can identify, isolate, and demonstrate strategies and techniques that we have found to be effective for building large systems that can be + +adapted for purposes that were not anticipated in the original design. In this book we share some of the fruits of our over 100 years of programming experience. + +#### **This book** + +This book was developed as the result of teaching computer programming at MIT. We started this class many years ago, intending to expose advanced undergraduate students and graduate students to techniques and technologies that are useful in the construction of programs that are central to artificial intelligence applications, such as mathematical symbolic manipulation and rulebased systems. We wanted the students to be able to build these systems flexibly, so that it would be easier to combine such systems to make even more powerful systems. We also wanted to teach students about dependencies—how they can be tracked, and how they can be used for explanation and to control backtracking. + +Although the class was and is successful, it turned out that in the beginning we did not have as much understanding of the material as we originally believed. So we put a great deal of effort into sharpening our tools and making our ideas more precise. We now realize that these techniques are not just for artificial intelligence applications. We think that anyone who is building complex systems, such as computer-language compilers and integrated development environments, will benefit from our experience. This book is built on the lectures and problem sets that are now used in our class. + +#### **The contents** + +There is much more material in this book than can be covered in a single-semester class. So each time we offer the class we pick and choose what to present. Chapter 1 is an introduction to our + +programming philosophy. Here we show *flexibility* in the grand context of nature and of engineering. We try to make the point that flexibility is as important an issue as efficiency and correctness. In each subsequent chapter we introduce techniques and illustrate them with sets of exercises. This is an important organizing principle for the book. + +In chapter 2 we explore some universally applicable ways of building systems with room to grow. A powerful way to organize a flexible system is to build it as an assembly of domain-specific languages, each appropriate for easily expressing the construction of a subsystem. Here we develop basic tools for the development of domain-specific languages: we show how subsystems can be organized around mix-and-match parts, how they can be flexibly combined with *combinators*, how *wrappers* can be used to generalize parts, and how we can often simplify a program by abstracting out a domain model. + +In chapter 3 we introduce the extremely powerful but potentially dangerous flexibility technique of predicate-dispatched *generic procedures*. We start by generalizing arithmetic to deal with symbolic algebraic expressions. We then show how such a generalization can be made efficient by using type tags for data, and we demonstrate the power of the technique with the design of a simple, but easy to elaborate, adventure game. + +In chapter 4 we introduce symbolic *pattern matching*, first to enable term-rewriting systems, and later, with *unification*, to show how type inference can easily be made to work. Here we encounter the need for *backtracking* because of segment variables. Unification is the first place where we see the power of representing and combining *partial-information* structures. We end the chapter with extending the idea to matching general graphs. + +In chapter 5 we explore the power of *interpretation* and *compilation*. We believe that programmers should know how to escape the confines of whatever programming language they must use by making an interpreter for a language that is more appropriate for expressing the solution to the current problem. We also show how to naturally incorporate backtracking search by implementing + +nondeterministic amb in an interpreter/compiler system, and how to use *continuations*. + +In chapter 6 we show how to make systems of *layered data* and *layered procedures*, where each data item can be annotated with a variety of metadata. The processing of the underlying data is not affected by the metadata, and the code for processing the underlying data does not even know about or reference the metadata. However, the metadata is processed by its own procedures, effectively in parallel with the data. We illustrate this by attaching units to numerical quantities and by showing how to carry dependency information, giving the provenance of data, as derived from the primitive sources. + +This is all brought together in chapter 7, where we introduce *propagation* to escape from the expression-oriented paradigm of computer languages. Here we have a wiring-diagram vision of connecting modules together. This allows the flexible incorporation of multiple sources of partial information. Using layered data to support tracking of dependencies enables the implementation of *dependency-directed backtracking*, which greatly reduces the search space in large and complex systems. + +This book can be used to make a variety of advanced classes. We use the combinator idea introduced in chapter 2 and the generic procedures introduced in chapter 3 in all subsequent chapters. But patterns and pattern matching from chapter 4 and evaluators from chapter 5 are not used in later chapters. The only material from chapter 5 that is needed later is the introduction to amb in sections 5.4 and 5.4.1. The layering idea in chapter 6 is closely related to the idea of generic procedures, but with a new twist. The use of layering to implement dependency tracking, introduced as an example in chapter 6, becomes an essential ingredient in propagation (chapter 7), where we use the dependencies to optimize backtracking search. + +#### **Scheme** + +The code in this book is written in Scheme, a mostly functional language that is a variant of Lisp. Although Scheme is not a popular language, or widely used in an industrial context, it is the right choice for this book. [1](#page-16-0) + +The purpose of this book is the presentation and explanation of programming ideas. The presentation of example code to elucidate these ideas is shorter and simpler in Scheme than in more popular languages, for many reasons. And some of the ideas would be nearly impossible to demonstrate using other languages. + +Languages other than those in the Lisp family require lots of ceremony to say simple things. The only thing that makes our code long-winded is that we tend to use long descriptive names for computational objects. + +The fact that Scheme syntax is extremely simple—it is just a representation of the natural parse tree, requiring minimal parsing —makes it easy to write programs that manipulate program texts, such as interpreters, compilers, and algebraic expression manipulators. + +It is important that Scheme is a permissive rather than a normative language. It does not try to prevent a programmer from doing something "stupid." This allows us to play powerful games, like dynamically modulating the meanings of arithmetic operators. We would not be able to do this in a language that imposes more restrictive rules. + +Scheme allows assignment but encourages functional programming. Scheme does not have static types, but it has very strong dynamic typing that allows safe dynamic storage allocation and garbage collection: a user program cannot manufacture a pointer or access an arbitrary memory location. It is not that we think static types are not a good idea. They certainly are useful for the early exorcism of a large class of bugs. And Haskell-like type systems can be helpful in thinking out strategies. But for this book the intellectual overhead of static types would inhibit consideration of potentially dangerous strategies of flexibility. + +Also Scheme provides special features, such as reified continuations and dynamic binding, that are not available in most other languages. These features allow us to implement such powerful mechanisms as nondeterministic amb in the native language (without a second layer of interpretation). + +[1](#page-15-0) We provide a short introduction to Scheme in Appendix B. + +# **Acknowledgments** + +This book would not have been possible without the help of a great number of MIT students who have been in our classes. They actually worked the problems and often told us about bad choices we made and things we did wrong! We are especially indebted to those students who served as teaching assistants over the years. Michael Blair, Alexey Radul, Pavel Panchekha, Robert L. McIntyre, Lars E. Johnson, Eli Davis, Micah Brodsky, Manushaqe Muco, Kenny Chen, and Leilani Hendrina Gilpin have been especially helpful. + +Many of the ideas presented here were developed with the help of friends and former students. Richard Stallman, Jon Doyle, David McAllester, Ramin Zabih, Johan deKleer, Ken Forbus, and Jeff Siskind all contributed to our understanding of dependency-directed backtracking. And our understanding of propagation, in chapter 7, is the result of years of work with Richard Stallman, Guy Lewis Steele Jr., and Alexey Radul. + +We are especially grateful for the help and support of the functional-programming community, and especially of the Scheme Team. Guy Steele coinvented Scheme with Gerald Jay Sussman back in the 1970s, and he has given a guest lecture in our class almost every year. Arthur Gleckler, Guillermo Juan Rozas, Joe Marshall, James S. Miller, and Henry Manyan Wu were instrumental in the development of MIT/GNU Scheme. Taylor Campbell and Matt Birkholz have made major contributions to that venerable system. We also want to thank Will Byrd and Michael Ballantyne for their help with understanding unification with segment variables. + +Hal Abelson and Julie Sussman, coauthors with Gerald Jay Sussman of *Structure and Interpretation of Computer Programs*, helped form our ideas for this book. In many ways this book is an advanced sequel to SICP. Dan Friedman, with his many wonderful students and friends, has made deep contributions to our understanding of programming. We have had many conversations about the art of programming with some of the greatest wizards, such as William Kahan, Richard Stallman, Richard Greenblatt, Bill Gosper, and Tom Knight. Working with Jack Wisdom for many years on mathematical dynamics helped clarify many of the issues that we address in this book. + +Sussman wants to especially acknowledge the contributions of his teachers: ideas from discussions with Marvin Minsky, Seymour Papert, Jerome Lettvin, Joel Moses, Paul Penfield, and Edward Fredkin appear prominently in this text. Ideas from Carl Hewitt, David Waltz, and Patrick Winston, who were contemporaneous students of Minsky and Papert, are also featured here. Jeff Siskind and Alexey Radul pointed out and helped with the extermination of some very subtle bugs. + +Chris learned a great deal about large-scale programming while working at Google and later at Datera; this experience has influenced parts of this book. Arthur Gleckler provided useful feedback on the book in biweekly lunches. Mike Salisbury was always excited to hear about the latest developments during our regular meetings at Google. Hongtao Huang and Piyush Janawadkar read early drafts of the book. A special thanks goes to Rick Dukes, the classmate at MIT who introduced Chris to the lambda papers and set him on the long road towards this book. + +We thank the MIT Department of Electrical Engineering and Computer Science and the MIT Computer Science and Artificial Intelligence Laboratory (CSAIL) for their hospitality and logistical support. We acknowledge the Panasonic Corporation (formerly the Matsushita Electric Industrial Corporation) for support of Gerald Jay Sussman through an endowed chair. Chris Hanson was also partially supported by CSAIL and later by Google for this work. + +Julie Sussman, PPA, provided careful reading and serious criticism that forced us to reorganize and rewrite major parts of the text. She has also developed and maintained Gerald Jay Sussman over these many years. + +Elizabeth Vickers, spouse of many years, provided a supporting and stable environment for both Chris and their children, Alan and Erica. Elizabeth also cooked many excellent meals for both authors during the long work sessions in Maine. Alan was an occasional but enthusiastic reader of early drafts. + +Chris Hanson and Gerald Jay Sussman + +--- + +## 다이어그램 페이지 + +### Page 1 +![Page 1 — 다이어그램](설계원칙-001-020_images/page_1.png) \ No newline at end of file diff --git a/raw/book/설계원칙-001-020_images/_page_0_Picture_3.jpeg b/raw/book/설계원칙-001-020_images/_page_0_Picture_3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6f994f2280b2777124754d8a89bf67b830e07d6e GIT binary patch literal 57880 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 z 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%0DcK|Uep0o1-=uxZb~;C%)cG5 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

tL_GYgM(MqDm+yUUpgz<%8Fcnd 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�Bh>LptJ=rHDuX3^6ZU3ieJeP8E%-OOcWE|xql{>N5S8qAouR;IuYSEdMq1>_hqz!XwuqROK=rpgSTRocR1 ze8*h(XpHyzPe_|LNy&R=PYlkrDHM)X0Lc77q` zGwlz9lpB~Jc0`1DGbfH#VVkqPjvFsi+P}xP^C>8D}ZG_S`}DsDu87HEVICpF^tHg7+6X| zFuS=GiH3@a)@rP5NvV>6CC8Qv9^i^xq>D~r_1!*z-< zJfn3vg};LK z5Sm0J3As}qz`S2_KPHNh`^k$T9$4Z&B`UWfNs^+)bActPtjp&I^5taLw4Iz9|Lkmh zfsv|=IFw-)t3<$(B((6`6vH;fpk3ibwp0Yj=YwQFQV@rB+KlG94WC%zydAmZEt~=9 zsvJV~Ck>XkrOLsaRETYdY_P<{9@Id0Dx*~JoKFI*i63UZ2QB!pgLCjw<260wts)fG zE{ob^Q8G-p+f$~M%(}-zG#Me)#{`yeYC#(+03v-LND4Cqtx_uJT?|+XZxE*yScZku z(W=pLC9vdg0uOVBC5xIcOoAX1?v$Puh%LdSIdsUgz!KMVV2%wtRS_zjY2_iV+3Ag& z2bSUVWx|ogb!h=u;#=HG3UvT79hJEe)BctVEScU*?%-MOU(!`%0UOy9#N6)L0Myli zC7yoN&J9C6ahPrB%;|SA@)3p8N4Nr5#>BvqG(J1q09e*njdYqe4!9NqjTd2|k=8u` zmcE9azJ^`?hTUf|SkgFHcrsMGqrSwtyPXRRZh0o zZ0s~lcbjIrO>?Z~i3nci4VGDKxyS&jASLV)`)!NeCI&3oAB6*$^%$o+F?xA@L&Z24 zd^TysB7s{JwT;jKqKRR1gz@kL2;p|lMWWITcv0r=g%%s$6rCy**v+-lU>!&ns*{E5 zq?X7+A$+17EbP&AP;NzpNDw^9W`z|&N*-9o0K;JF2EmL}uO0!xlR8xzFINke zAKBK-1(r_07`Y#0m-{GKvX!nVSjLbi zNY5u04wA{_sfd!YMnSTV0FE=rwX==A3fW+3!*gT?U54!_`eL3UF?EzG8Cat9$TXS& z!fEmJ5OTOG>Lh~Z;(x|YnOvFS1r4z{isJVxr}+IvM8wc%!XwH2j6IpZR+5fs#Elr7 z_>f6>hR(Evid~9m23U%^${Da^8Ye(go6sjBV5wl1az2UaD=)Cj7~m%bESbFV5pItR zU2b-ySu69CE+yXkptn<2WN|S9qtdAYg`H}YLxnp4aTLpfMDQex@gvG86%1h;06$)u z0C^I$D^cWLjHBB|_7GA?vol`J3@1D;^VwLi6bu#`4lQRO)~SqvnD9{r7x)me(_hE6 zt)L6$G$nh!s{u=L?r=si2m2E_z|u<;=F&P)R-}GNGU3NLbA=3a{sx22_eL%n(ou)!h;6QO;;Wl0qV^9XiUFlG(C z6)Blr?=%93SurK1C&-~hxfOwi@<5{`*dPs|WMNRf90)V)rYxbLB~NHk*#O9`2vXH5 zLUr;G5-Gr>G{UJ)7O#_2vm3oSWK$ov&4vbNhN*1SVn%+TY>7!tNGL2&W!Q=QA7K|_ zGizzMR@&Qh*2u|1b#@y4bS7Scmrhm0T^RtmD*PyfOuv)hB`a#mgeX{YwgT(ti3($! zNH0P-K_?ztRhX&�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 I!SoI5?lLF`p*DMs>va4o^Tf|m&8iU$`G9} zAOroPBuI}yC_LB_!8T*CGqYN{IWTD;ZO-qhaF)PBc`mnLBL+0tk~ee&|Qk`HE%UZIT{8^s%>p!bg^#>5Gx zCWxjdie})5`%b^KaC?z< zjtuAmDu|#W6noeLfMIzIbu7?x5>}HqKER~nkPsMD;&3HIEGZWjz)qv*#~?U~Wuaga z(Ie&4(oi-Fe7pat>!^t8jP|ql-lzV3hhA5Dai1*M|Nx zo$QttEyx)^a8bqDH_m>0@mAe!2vIuiXw_?PvpEo0IBgKrayeU?&;w1HM{Ji2XR6&Q5O|7vw{N{ck%2Va`#<~nh$&%1Ck+J zj}Ta#zD(W72To;v%ev1#`D*3!6&|qc!}rq2198v~Y;Rz6 zD?Jmnf(eDqa)uEbYf)i9vl3k!!C6R3D3i{_pBf0NrkMyVO%j?BTv+L5oUW274a!8P zn%7+&L1bp8j(l;^`cL;BZMxk8rK&I)IUF4}r#k`Finz{UcYJsJ;N$2))oXK%GF!gx{oq?dAgNc7vXWhGaC8l3`M@O<`;dmNcU*$bz?|^JIbfV&5Er zmxbG1%kxQ>&{Oj=MlG59>Zf~-)?BM^Yie^ja7Z76C4>Y!V6aqQuG#nAu_vdm()2Fw z#Y6O%22)U=P61P54p_1=vY{ms21`Ley6hLg5@*;VK|c`$me()WZZCazbl>?2@_f=O zp8e05kVpIQd!!4zbm+~pA4_LEnnHM|MT_$DwUb_cw*1I}Z*El8x*+)9Morz&GuDZF zsG`$n>$r68=H54tE}36Gz%)NSVoV?52zB^0LlgyL(+$y6u`8?_DKTNrF~)!l(X$QF zv#@3wJORu<9UvcsFb$D2kUG1J7^0?Us3!Cg42cLXRKRXX76MBs&WA10hhX^!>mgV^ z1j|3^s{0*a37I*NoWsbIGV;WXToL@MK8}&5XT=W=jhat}E#pbo^92=LVk;3^8A_CM zcwnwWic29@iNKP(5%DAsAtedkux_x#<~LNE5UOmFBiup=wvqhpByR`7+s@%_!@O6H zD;rB7j458nm9F8+R&!+ljf8ADpvxwOynN_55U+4AA}3likTy@>u{tbwt-vGJm*@j}Fw(~=Ngb_L6baWjV92bMN$o^c;op21)_ z4}FedtULr`5O0CFB?e1cwj367*$^uL$TW9K0c|kckf~%E?@5=%kxA@lgVB)+QR22D zR23!GJzz;;C*n!8oR!k_h#N`o6xQQ$eE+m?B2ybXa%j#|izaQFKK#|8*-xj050x^E z0zVDkM*;5;j9fVaK_@LlsC4x|g?|{`yC!6-TPt zDYMgiz!F`|O}89J_n%(Bba#K_)SjdXfhEyBL*QeP1)-7K57?5CgFTZBavB0lHEtcG z4TE=tF6msfT8Loffv^QMdb4P?&G$_udZdX1&HeTBRz9=q*eB<1UTK8aciJ4z=6@Sl zLh$fbSFjw&^GOx@Xr=xp$acX-FA=Qlo-8!_3Z#Bn>_<|$-UxUs!wP1tUB3Cmk(2dx z4X|W)H|TVMXR;GYFRcxZ#u{t=_2#DAHUyS!PP-ja2`I31{s)2OjjFoO_PN0_f;2N8 ziRF8x%L5_WuY{dJqbFG%mnlM`flkg)gP3YLWJhZi!FrE%mQjvIHFibPoYes_T|8bOw%?BT-CXTI{%~z) z+1_!3o{AJ&&>I&A!uXZa3}LM7FlO%W1WCfRypn@1Un#5SA4qm&C0`1 zO)2fGou956rwN~`?Kw@`6FpAW^_r}YnuZNvXJW9N^M3*?L7iZ!>op}+F(#TjAdHoZ zlle1odtP_-&A+ldcnFpcI8XfySoR7oh$ROk2!|$%N2W-|AR(~)|Lh8z(n*yM2$qbW z;3eZvuN?cU=x4pQe&L6+RM<~n&O(dATsgQD=F1rQVtO8;N(s%>n~`p0B@79To<*u& z=1SJ_g{1<1IgeY;<>Dx%&>iI?L>md-29j9MB@k6skYqW@D~I|+5yUV_h%s(JY#Ayl z4+W6h!4bR$^_jf43EmqV-mXyomQX=ysCX?$x`I%?Ktw!8Mm@#ty^tF>kBpx~CQKz$ zNAt8J`8rA?_N_yh-7sZQi9b7cxFP-62A)dB-C3%$tBAKJ=Xm*5F3y_Nj(4LKC*%$-LyqhHdL

ydv<MRLgjX8RTPF-MNP|uC;7mnujvUP%^g?M+k(}07N$;y- z6oxbN!V%B2(dtvLV(OH1or0!S()AHcOD}eAFLseKFjweh3VA$P!q61x#=rFR#^Z-5 zu*Ai!4zSO4+OcaWPK9l3Xgl@AnmWNUoCV#O&@xvLkbzDP*Dv0ZGV-aJuO9f| zMD4ZP4yywW*l7nrTlO~SQqb-II&O1a`0o0LyN^9N_0`<;u|2t&0)KUAw{)SO8BwK@ zfs}_9?(!g$9Ic@l1{`??(gP%8=b_slr3iF+&@+YLOqBpLjjmxU_3Ah&_YVY1Xv5RkMy0}{^?iEJVk%-unfHVcBB8PUZPhA!N>`Q6jso^NinI_xk?a4-8dw3>(bP@Btcb+xtN&mS<|Zg0n63Fp|+ z+}Qj}HJ1MturwpE6nN{Rd4&ZTQ(tSKv7TAU3F`$u;G;jC8MjjH<3_I-U1SbC=` zf*`IQ1|&%(9pEej>_LS-Ryk8AXKLk44SH0t^a_?cp&f#mbllDXXZ*qdN5htFMrSy0rY{(bF~64KCaVv>oa{+nnt!c2}dr)#5;> z`IhbCceQVAIlN%vT6N@z@X%bYmxkLzEA-YYq0%xJ4`j3qD-5IOVXy?hE+yTBhX#}; zDRA%WFm!&P%}ln$AB{~2t&0NEl2wHxi)OE1zV*w)r)sa)y9)wbPBgZi&<+GDY@H5A z(=F@q&rYvgyrsx6MZ!dvD3Th@NOA~@=D^(za)W;ZSmI4dhqc98TXh>!wFfWG=rvdx zq~-QV6?mx?0hwVz`6^mJSzwXSFOT#x@qBe?TFXuw`{eXhd*A%*>V@lVtv0+{gj2O4 zsodehU5U|Aqcis9p>vyG-7|U6OPLANG!YZi!zLhUdrmP%&(KFr*G0KoRw9@*#>_QD zBdVOEkD3kbE2Cy2{YQc2EJGv+`dCKKK*~^!Pmm1j#R1PANuU|0K%<)uzPbEsi|~hF z`GE7(FN3AvAz1zfu)Md$>iuBZ*#P}d|Iq(B`W3Kr-!kFU>Cu8x7Mv{$&XWZf$e9H) zM3uB$NsvWF(`7J|2L{K?A;Xt(r5m~YO*~#1pI^p<09^@56(~}^O zax=l(ObRNX4I|Z&5?Wktzzs#paD5~8;}PyAgl`a{og8r`N3xM4U&RSq!s)q)6Elkw zKbcG&%hinF8itbQL1bnTFE2~j&n)ck(Eucq2xJfsFiP$!Q{2Bu*sp+>pUch4;^?zN z(sJ1G1?-q&cCS&P5mSlq`DFOBT-8#p@>Q<1f-Bm>6>b5)S?*Sn*h+A=fQZfD6N}hV zw2>p-z)@@i))H=s_iyuVKNl z>5POZrdG<#mY@|Iqd-M3QZe$~5vnfnC?(!+?(ALpprPzPRu2xA&}tmvB~@ct?E%YZ zkx|ap@cq*HK6;T~mYi0opy$av(L6}bq?zDW2gzDlvOu#Wz$o@ZuaYJXNEP}fl0D)? z0Vz@ZtYY(=m!8~uXz%w|&ehvn5dqko&K9Su$>F?ZchsRT5Lnu6_WB!*UmQBKY1P|f zik>#ajEM{_iXjH|;f_cWjZYF!jOUL_5KcgZnZO?xM~nopB!=k1Crlr@YDdYwbKhNq zH3_21JFOkiGo32evA0>RH?Q6LbkE7fvp46b&yu3G8Z%!7HldJE1P=Z|nQ|H!dnl>4 zoY0vw2d5il;l1H(yvD+jO!u87lk(zHAS$3iN)nYoi%y6%$RNR1u`+Oog?m3*s41CL z<`RIVCswHw1*nDo=|casaE>uKqG)*G{AG(OK6vf;=`XK0-f&i*Z#jAR+J@zCjp_eP zV)#HQ%fR(jbN$kJfvG~8Moc$K=vh))o;0vP7KA>LqA+@a3f7|t$q>>*6{v!)S2FZr zOk)Hq6GxA8#J*;-yEdd-l9FR6&YiYqdF3}>{7_fZfWZJ%u@eMS%3w5qGaJ0qQaz^ zh{_^Z=mh2?h0$~6ftey-J<&at3z1lTN<{y`c{4Vwc>Tnov$t!k5M04c{P13k9XDuk zPyv=Je}F4&2h}3e)nRS2UHh@_t!?|K4u3wqS23=!R7?DfonVPLA2;;Qkq2cXmgahC zIo(sk36m*l$aC{v-SgJLs!KI3jfgSYAwun8{zjY(oBE(sfy#DQtd|W0ZVkWZLRhj*BTCg^7X3cH|MIyA+V(X1A%1* zqB81(_Eb$9l?+_5OgB+@=}C7tDm@7Zcq~J1JZ1gu-dAD)SSr{iIm;-61Qs;p(R7h7 z56lz$WOJTKNA#udJ$TOerSI(c_{=vKtxf10<32GRHVQ25u4Z)35#rsdv7S73am)HW zlZHNTh##$Bo4MZVkjK)5-Ue9!?$YG$W|@m^{~##<+LGa}*Z7*rLPFOt`V>Sy8gBO# zo_CUzkshze8Jag^_0q}%dyZbeQq$7Z3V;TmBQ>-suyk5m+Af~G{??8IGsY}a#|$C7 zlLUTgk|2$Yt_LGAb~XlPYG)00#L#Sp-kOxDi4kQ@8uIM64e#FrmUnFJckEP&ep_o> zU3KFdTRxdGbcrTvh>WfydnEI{(v?A$Fj_9UZz}2iWI=reK3QBZJ?WJZFE1+2n!bMd z_7jIr-L7kat|d;~xde{e4sB7|9k^3%$Ca};KY9DBrE@EWWIkz(nUtm+mnt8pjhJSN zK>#_!1C}!}Th28^f%H*x{zJjiNOiD`o~e(VhTu6_J}QVJZW$NLKIn0o+L0Q zEXdrOuE}G?PYLO{l9ZHjdF5OJJ>qy8Rgoyc;X5jWRIr}pttGi@Npb_h0~c0OQ~{2r zLfjODTSk(b2x1clswKhtl@OK_;xa;BN~qS65v#~vOUS4NWbbKY;utc0FsUyjGqbpP zMs7bHcaWMpBuy|fQ9Lf;Ud4NqAQ|7OM0D{8#wYPc$8(3paQa1tWJj{~v8=R2X1tEo zCpS2@I3#v7CuR~SdM?>(F&6=|awS*3jw>!B1zQO2HiFne5Zef{62~n!62f(a1VloR zbK_mG6mn1#u`G?0oh4%CNf?C` zSgPDcFPV4se+w)>cRR*5d5PdNcpoi}`3c^D!0caaD}S(9bw=#d8&(?)j>&s?~0VJ#;(5y|yNs z9f4(&-O+??MVu|S+b;cZRem^vd(HX@SUzYj4ikv}F$I36jUKPEvq7F~D= z{4pM|9HvuEnm**!9VPp_fMpAktD_an23=OGwdKau`u*>J_4Le5*{RdTfoQda#$%qG zmMIM~K{cJfQ3S0BOcDgf9-(h3-Se%#N$PJx>p3i=G{A^JS`r9NM9}gJ*F!?GF|J27 zK&~1FO9%qsVoPw}p&O{|O1zj;tAb6Iq*2qyEUw(}-j|2Z*H$&#Tc94w-r9b<#{R|O zvzynyH*WBA88JhJGg#Cdojn1xrLCS3f9mdKes zgL5K7^LmBkD(Mz}4-NaDNr8Xw&3+;-Qe>Gl^64Fw?_R!C-Q3iI!4k(S+gi~A6fz_` zoQT_MZ!{h~cxKt6E%|9PdENEg?pmRr0jvn=W)%WU79?Jx3(NzS8R7t4yktOM?d;zM zmQSRMe6+GaJqAlk<}eB@!Knxlbt>c0C{?J@oH+W~nXC8gK6v9w9eC$J2YS2BZbes- z&EDv6;_m9$PqO)z?bOK&ySDC~IdO?0c_=?9iTOnDfWJkv9!Ve{PZ#?bl|k9PScMTl zVw58tWv&Rh+_C^PQjFYg86l4*vmS}(`=}#{f}sU-RxL04bl;a%SL$tGg+hU)3$rE0 zn|8{A_zwrm>Prpp?D%xrh$UUY5{+&ZMmwrS1l}=$tq`G~9)TsIf?j-canAIWODewn z{B-U0+c?$G2|*!9k930N6)ff*=oxhB**k1*u!K|WYH4cu3xK5|hTpG9GvhaaC1Ixj z7XnK)q?j^sXdP!9fK3HD|f*Xq3K<)G|FH*2|KdVisS)> zoF_DB>WdL%4zx^K`CQ4T9~^JE-fC-c;?}$rSR$%y#XAu$o84Jg)BNSJvs+5uojUUQ zv|a;*f$E^Y^=AAnG4#=Nv9CcMgs%|1S4*hdMxh0 z**gpHsLpNgKhM4QyWedgN-`E1ca6KtWM(3hObqux3<3nFK#^iCMOvgt0>Q1NRH)$v z3beRWtO+C#AGh$m>)n$;?HqdU={cw0DbH$}3?Z4>^X_-A-(G9||7aWU0ZY71>HfE1 zIdXAEGBoG8Dl2Hdp$peJmg&g;6Mz3@!Eh{;=KSJ>jw}09ApcVSr zv2l;nbf>3aKEyfThIB8<^rj;&MC1?xFjQvU?Ye?+*foQVCJARlyEVz3+>&jm@? zWMKu0BthlBv)#yV0ZZNUqY7K|pJ4f`@fR9myTLL?LQ{$YG6nQJ0lh%rUnC+IN_+~X zJ_QlJIce04;eIi5{pDK%*n8-KTbT4sOwLAzXd_)(Lzix*3+m{cEp%orleM13UdQ6D zWg-kiAy~r@tpi0I9v*09?qbk)F#>in0=6*d=$qFuIjdRxl`P>BmSPSw@-8{{81oE}?FkD3@5J~uFUS)g=%pkQktZ#SK@ zo59@4WNcwFH?o-Tu@EhD)-w6)m_1;LkXS$zEo)%1l)ZroVnyp%fR}%Fu*5pL+>K0D zEt65lW^ZH*-exJP1H*OHm{>pb-sN&>g?vgsh3|kMQc(~zL+0SnKJOTR-X;Do(kSk- zL3)_>Hwo_Eq*@lrAfcVGNI;4NqW|r|_zhcw-Z} zV-mQP3H-_gK}9^bG?q~UGnR}JwPO6F;j4FUIC|?!1BmJaSn5$Yx)5m?QJ75nM?XCI z^5e6!tJmiwjAwgf^1M(gujRO_nZ45kUr7yoB_;5cWcsVA%-(4%Hzf-6IHOk@j&x>k zB@ys>uXJ`VC4w{@>8##qOo&vLTME-HnbA9u(K{aHQcU-Fu2;IqR|~L5LsY55^*2b- z5P1rGG8FzfDe__cl~X4TTe)WOp3gu0`ue4NEl)bkMvKE{?E)`*L`>GE`qqnQ?(D4n za^95ngL0>*h7XYjDtY82rdNERdmP<8k?E0wjy&5VgYBVYyDK^F>1_8jHuTLZae)qi znd6p0e-11?4{&;X<`L~`eh)n-0K3%E&xkB z3-=qqQci){Htg=8mHBCTKIzo|8_DgH8p$slSu}0UTU)Q3yV2I%4%7oPxn`>ky^2l@ zmL}|#Vz*jtZLOU*uHM_f`_LOR-|L@KoftGgL{_0A!}y;R*8ik&Ud`b3QghwVK?8vw z7CK_+a~zCUQ_tqBZJWbE_=9F*zT~qa^P;N zL@)H=t;XL^71q#Uef*&PlRYOUjb4JllI51f!#?C3*kQls2Y%T&pM-PFe(~N@fP(iQAs5joZaewXd zT|@I`{8PY^+Z%0MnGx*%eU+1zy#SUyGnTGaSfiz}z6FEj)&k|2V1}0bA2A#^mCQFk z2nv8jEi|4gV!Cf?etQ!UR5(+ z$zZ;c&gzvc?2{f!&&*94Q9Wu-?Yn!w{_4Wx2d#zfM^v zd&`E*jusd3e3i8S8_)Gt0XBo=Yz}^<=nX{~3(;!P4VDyT1TVL0*!=D5KDl}Eho6C^ zts5-c_HX~Hx@4g$YM7X&WO~GLyprU8nV_Q%H#>@;=Y`Z)?lC?ynk&~6H^rWGcxM2hvMVH0qG}_>xnV}z6Z)yIauMg1|r5)4!#v2kU@w9N3y%Aj#c;?gMg;NXBF!t@yT z!4f?(&`R@?t+2m1v4!HF36{S>p5$L5bT4cZuv>-t_k9kQU^G&Z%&&Y-R?iXZC+Jo6 zJOnQh{IS0+ej8i<)p*&T_9MNb=U`c$z#A3A8X6YRFT}49AI7{Nzuh|AVB@OE^l z`@Q}b3YS^sbGcXCl7tIcE?GI4>&OuKW$^=b+`vMve~|!PmVELee6&iEx*siNqF?0l z0O`&E_TE4S3?DMN8|k8rfs)!l@s>dTmO%CvI-{1s+yFALymd_BdWLWr#pzmhTH#3=QS)8}n!Z{qpRBmV`H*P3bIgqFB&&w+0=jQSYG6j9p1p^ZV zLt_OcQNprt;g~StxG>R#C{cC1V8TlUZ+rr0LL6^=48JN&P$B1)2-$<5iky)^RwYx_$$l!ee_DZGQi)&8M8EJi{N*bG#T)4S%?$QdCbJGIwDgT^`bHLG z1B11Z!QRN=)L@ZV2oUdK*DzQROca2Z8=$(#C91eR@e_Z`7w0Em5-it4<1w26%NjO+ z1zR?S9@du@o#dA$^UoI0^7)ivDXG7lT&VbEuzXIHI6-m6%PgMXXM@Gh1hW5Jp1Ydk zmd^7^$6&eevwbI99-FKtxJ8U}N%w7I*;x?`E<{*sTE5iML80G727+V?TL6S zPvqNAL@E@LvqY3E5iL{fr;+$)%IMh&W^M>OKa`svDJo138>melJvgs=O8KG{3u-^w zb@=L6M=%zP4JSYz2BAPDHb=kwt_S=-trk_1~Sny7|5RrTyn5 zh==(9XDR|qkxwpe8_t!v3|jN>($aCGCL?OZq|!wn?LKt-+I_PT zG&XIZpkqK(=>kh=pF?>($O0QWO?PiMeD&#>HA{C@k6M(UT9G6h5E_^#_01G|s(8KA zIc{kz_f!avG>&IF$19zS!aGgin-Rp&rUVZioIPWH^``eXp84+Nt)`|XliB3Jb8}X^ z&1^B->_k}))^L~8B{UA+D3cXupC3zogL69*6qUjUYt#)qxw#GG8ZI6Z7A+dY}*sTO%_r6hEw7X*PM zRlbathrtqBIR5O|$H$3_J@OLX0ZOKm`6U4}+{6`$uO(XLyfCdu) zOOU#ek_x51c`o-_a2xt5SpMjF!Zx1YtrQJlsR+=@{IwFAwi_(_$`M$S2Z?Tu# zkE9@mQWMvIcJ-T|?mK$>%6(IZ(P4vTX}bfuC+tp(&4G@v9i|DbcB9^M^YX(__MTq$ z`mTz8Z)QbS#c&6rr6TfCay=5bXia*kS>3lh*!YGQ8?mLk3cc^>9EsxQXGM=3shhfZ z=9+!mKf8SPc2j-3#Rv-r){EU@v6)byPl#T3v(fb6PW=}Lj!z%AL=!)p=bOfGPi6F0 z3Vm}x!rD(O$6$%8VFhv;)~KW8h)8N~pA-=}J%X$40n3gSGZeY8IuTax0U2Sl!Q9-? zPJpF4Y8cuHSsw9RuM{je1l`4AQh}IMjJM`A7lY@%J40&y5&4J73ZW`K6 zHjCp0u+-aOGcYvcRN^C{spjfDW<+y)BEL;=Fe+@L{z;*{8q61d&Uc3Io8F@ zF0d?#VGRxoC<>+#trtH7OV@*Wzx20%#*e|0g4HIWb0$mXr;+)qP=HH;FUn2xxU?ds ze=)N?W~Pe@SSiZssXR9z+rkK_WiV=(oQ-VWdNvoa^hPFQ6PEmeCRHZ8 zj?M;K6!23)M~T-HwIC$R|J%Wm$=kr>ZKAWc(plTlC!lsKn??^EM2pIxCWTWnWK^w? zg4nW9NX?hhwD1;F2n)nq`3n_(>@J-zqv*QjeEx}GSpZT)WRy$ga^2MI-UL_|9;u(Vn%_9uSgNc>a=&Y*}FP$6R*jJ%eg?CHcLlK%e|X-4}bdghLyW# zR=+*Gc%mk8NJ3Ciq$od(lOIISm-*$R^GocTFYKe^dFJxG^Z33x0ZAt$Lmw+x>5&%n~rMf~XjON1~jkK4{1y1aB|U3$o943?=s z1ItVq1fj_ZMNt_kA3<{9t7>^*L2h!@!q;lQ_~^`&$9fZ@FDD+>MO5hk8t-zzigJK; zfgQJxI@_Lh+`4rC(>+JuS+IHX=tYCGt2I%>6UD_5Ol?SDo+6+CMG(CpgjEp6%@616 zVkL!X;e+~SjhkHlR?Ryfo%rlV(_Oov&DHM;q9Qh!Ks8%XzHWA6e?oNJFmJ-rehA_{ z-_9PtN*z;*z|tSU5=w|Dw+`~l4DutuG8fm-&_)5ny3l;-1xBR(>-5JDP52eK9uc|%5hioJ#(cbgf}RP6)?;Xa!Q0u zl$4e&By0F26~`x)+AC7vpR7$Av2f8M{;8 zX}o#k!RlqZ1|zWa&*yn)c`blYpVoEmCBZ<=|A()lkFSB&P zjOAZ^c;tug>k)2&S&Yq$Ri@xxh}8o6Ne*lRV$nNWAKSh=ac_6c(Rq_~u-Fh)+DtI(iB1W<`AI|bvCmGgn7^Sgqcn(>>GwYgEO#|D(o+hc@=Wb^ zOLFa32rTo_gCbG}w@;FYoEE{+jvMyIj&%nKu(a9Wrj(7ie7L~U(%jIwfBT_{B?~o? z!=+?3t5-7DT`7kjuEXw&g%VOR{*6!$Ww|HQ{ySV2pv*}eK5P84k9QqL|J-7*!yPCm z0hS$h2m>Ayb+$gSTsr$h-P(gw%U0yZRi(=-l7tnSu*tbGGjgJ)5)P1>(8=nMDOuq& zb0S}dKzJE3BRk@c1(xWqCZg+Fl6Z6^dr**n5gzq_?uJEx<;$cNfBB^Q6Da2a`_3HB#onbJ*_KXT*vZD3iI!XNin!^M^_je;pJ5q}d{RwX?L%d$A` zh$!a3Q2)YT0n0z?GWh+Yr~CTnV5!C1G-gXbHE0Hq^2FqP9yOm$({Vt%ToX%4%OfX@ zp~Wl=2wzPP-pr6~VF))Ps$>w>j+ls;V7Ad+i{s;|OY8>85Y`3?w*(5dGI(2AoGon5 zWhsz>>3p z!`aAT6F!-n+3d}1E=-dWE}aOx!GDF{6SXjjD)^hh5_FH?Xd|#>?_hAZG6idxvN`n7 z691?yT2drcDMyJKRmZ0kppQ~N?elB!kGFU^;lxeF!#V$CuynDm3}q*t865W%o>#Im zVsLfI8wdA&-SXIIHQBK&z7=H#&z$yW4jeXT`;*RV=kFZY^VQo6HoP@=iB~ zgGpwW0VSLW13EjbcW*yA{Mm)=HD9b)uyf_YT`L#tTJgrt<@2_`J!i|(*Ehd8yY{Wu zH@!Wl?(MmC%jRzRdB9)IsarZ{^V@S#Y*{vM>r(iKb?DzNox5q-yxL{+YnRX8yz-5$ zOJ{AGJ8|vkqB)v~(NUa!SRV-R5+(Y49~Hwrnd_s96!agKKkMBkyUw4!-PF(yeQH1v zdaJX|>Oj$H1G!NvE+Ye5+AL;$oBr{`r?;-$KXK^WecL`?vuxXf*H%xdSW-D;?y&sn z1F|L;DXVqK6SVPFSuta>;wrKd%k$F47ON)=$(=fO$ox4I-rcx--xnX8x^nJLl{_W8W z&m+1Yd7c_(?{torDn>A{U&i#+Z|=Ex?sm(QjxJY@>m(W$yTJO<()_6D^x^N8&aPEO zjK<vF>FyZiPjk!|p+ZvS^gV<9ym-HQ72_3=eNNUOIj2@PRYCH-7fc8+CIgtQ(C zb7Zw(R4{=stiy~=SqZRwa`?k@v&Oxvj&`-eib(ljp6QpZplK8|m7JoHlXDd0d^}yE zg^Pku9)d%*hX#RVv1a_rMRk|Hy$z7yuoE+!gitd|;Z2>E#s^P7-E(Ma*+NysFs^4h z*F96#_AfY0#%oLC{TwkSs?^u>ke55#gWWOozE#LLs>FeeW zn**DV5N|qeN4KGO$Z0b=?Zz&L6`Wk`U3$Iw*3BOfSPs-qML-1_PHq}epDY;$OF|J^ zfpRTS!~P8w%a`22gkI>^rSLseQP2uIb=kaaXHQ&jdejVu1G`gnkBK_XMq}fn#;=cj zw{p?e{IsfIx{mUn2^=>y7HV?&yCMdbkn*Hh{07Bec_!3+IrT?i2@bS=x!8m@5BIkh zNU4PqN|BgUB%$aKSaSQMbG#EdK5=m}?LckWJBv1a{ngng^{qBD^l8}b7OTyKo3|}6 z8*DM7Kd+NLW$!KBxnRcXNo5O52h1LnJGDqXzCc-pqF?63A-ZYh zgXc^xe{=rSRcqebwr|U4rw?7Yf1{zfvE68}+F=bk@lv!p>?WJlXtfw&kAXduN)}4f*Q6?+T)W1FAZJ43M7<#2_;)d%HZ{Y< z_RW`~!|tc!dn@U^;&?vE(PG_DUG=KPTP}Wc>uE!K7mWQ{98LqshCADA&Nk3qMklu3 zUVpds_~#c_E#5U!H!~-CY?5$PM$owI$SK-rK(g$JX<6YYrsqV?(nihB3ZIb~HVsTK z|2SZ&jh>zzIaw3tnyw6`_aj_JUa(;8UX5@&`%hKa-#LCUISZy0M$iYwaYkU-9+<97 z?`AOHZn@K4w4pJ4eb(F2yxXgqNT-S0tho@F{tGN|uPC3a6&1sByz+Q8WC*SJ6Xi8H(*p$uC4U63I=6} zM3eSTSjpfp}s8i#(q zWK^VZL@0lVoYhYpkT0U;3aL3_Y7V+S$$SS$NW~&@zJQV`pr%Ru;zIo+68wX50%Su2 zB-ISrJf>n9CwLuOv5hI)$`Eg12sRXa>>4f$2l|{_!{OJk1vM-X$gOc<=8 zoUvRFCY&&1xdjX@IXl5xQ?{5MIwl}W=a(4mmoE3q643GlK+Ac546r1-#J6PR9HF<8 z=b6m&PEBjYg~41(wb(%d;-)GiZslp{u&tV0zNfeErhx6Nk@!efa#T z!}JK8K} z#H)6kg*$ORj{on#dLbyUGMkM!FSpw)PGhI_X=BI9Ls#BgvcJ6l;7Z;oF5 zd7M6S1qJ$^Q%5eL?}tZ@UOR;!Iep~PnPZpE9>09{_?2_VuATVo{3p9lyfw3KNY<D`;vPIi#KKl05wbrMd7L&;dRmu*lz1?C% zAB{l!pmb`6xh%-|apB79Xm8O!yxVx`+ndL}Jp1A9ueNPGux|OTcNcG4HgEHiS(_G4 z-}uJV_4B8%ng7~5OXj?{V)3T+D|YPO^zoqsCoiA5`S|`*eVY;e5P+aA8#wGa^fr5^ z#e%{>ICh{n=g!TCUwnLG#)QS{xPd}S3afXrz%xrmDhQ$V3!)av38hLBv=L%4(t>WV z%!m;T=&zc->digp&)#Zz(vA%i9WJo!dIs-})%5hyqfe0Ixa!<<(0+pRElWoczNGZ{b#IOvHP22m)n~SRx=oAK;N(x zmo6a(HQP{PZ8M`+`OE=gRCcq|)NX5O=)8aZ@wX?gefiPJy<0xrvGJoVYd@@A^+C<5 zeKo81Zm&7;!Oky^e*Vp+vo{`o|ETpzyIBvOj!s-U##3rIZ^zb|cFYOrXrW*9Bd`SV zp0hKn-cd!BAh4wOQi{oiQjl=W!J;5aLdJW zchGqO!Za=^6D*Bs>p~AgE9~B5Q_B~tB1iDNGWZ@@LIjq+*gqD23y7Bzel}uCCiJU= z>0%aQOO{tE%PWybPEbY<95-^_2iv|x46JW8+QFONij_+(c%@k!HiH9!B{u9q+}5c# z^?;?6mW#lW(_8HVOI$X=W_r3{v=V-{q5Xxu?j?6Hp;rdiEs5``jNj2A$y`8VrR(wTG1ZQefG= zllOonw84YAEIPcoxOX&PMnm+4^8S1=dLJoJALe+c2D(KHsEN^%tcpR?H>}uk{^a%M z#~omf10%sEbZT222D43XwxBRrt!7|98(OWFj+Txe?$%#CbM@F4rw{D@YRmflYnN?X zvAFi_1sj*n-}ugwy7en}Z?E~}qdiBDet!1inVS#qG`2s{J6&zd#PS5CVzeObHX{N{ zo7If(t=K!7P3OP4zN7Y|su8cJhWD2RXwXK)a#IU^bP8%e?1HQ7sfi(^lu?Uhz|8sL zZm<+n(jvKeJz&|{YQ(;+uqR>lCp*?pGPgW#`EbXsCi3&d35I36$8~%Q>CNQ}+88u%*>o1}d3dmY9 zIU|^ym_m)}M+=?gAG9=3QOA(&WJ-3kgxi?hIwof`E>!kVB|sEQ2mxTp!!w54l-8d{$k+FMNM(%#u_>TEX>VdylO47f4SiY>Ui{}71| z7B&Hf!I*>_7jY>G5_6l=)aiV9xAo-FD{GeS8(Af3H!ez1MrXX6IHtqLncmw&c2_rkdw7rwi4`Qr8KS8m<8e&>g~51&4IYUt3zco$$L z_@q0)w;h4E!QlkE4x0^;Ejm7y#}C>LeSG@udF%VC%Y&IJhFb!wcdEoUFNj(c;^zWO zsjpV*n}g140xbDnnJhOY*P8&#Y40xHb?%!R%`UL)BJMA^z|v-Z+W7d?Q3RIj(jtb) z{j(8R3cOT=kL9m}WdXtfiBA?nDUMevr%!UcqVK2yGiz4uzw+(9R+L-Yi6eu!$UuN4 zratH~hM8g9?Tr?v&0;qhtZ31q=hpb>Y5jx85AW1Jyxs8NcEkPK^$+hg)IV%|+SuIL z-fl4)(ZO)S!Rd53+ii9|0sypT9o@~n_>UdW&Y6DK# z12Z%+!xm0^@9=?h4{kj+bsEw0cXXL;ATVRbU7;@k7;y1^2vWOk<&YkUAabMd%aeoJbH0R<2e$Q;TzsgtJRfzSTVg=(ScYdz zVo-7EfEk-oZcWJ;v;Lg~ef~AD2jOOQ$ zAGQ#y!XmIV;PnoT;da>W;m>oh95qKBHAF&Hv)t0y?n*f3RE@+>B_d}DeRD)UIZ{eq za6n;@e*wZIrh9UrTY@Z5U64_^Xx6&JpPp%cthbmDSenrR!C?8+-qnsc6YD_R4Q-YS zr*3XozHj`{C0UUbDYBA8(ddkzYE9_0%+S}e!)N70&ccBFECo3^juKTs3mM}tUl=HPk0IL06zpR0ce1!!z-t5o zRAGTC`PjSCg_N~)&Za=tra+(Kt=4`gg)@ZVv{UuQ>-;Ux9vYO;8RN&FEp z{IQXOY0-iiF@hO!f+=x=>R92}IN_Lh0Ym~H1)K{gSx@0rr18qrcx7o^h!kEqfTeKk zUyTIx)5K%qgyk44N27=rjY<%Wj28`y;SP*s6^8`m$!VEVvRY2c4ki`J$wd-M5uaMX zrs-@k@Fgi&4vB zZ-9y-e+^Txnkjk@rc7UKe|;V`Jzd1V9V}O~IqSf(g|VB#exELQKTy6tFm!HU)X>1V zw^Tq`rB4PZh@_h2xc!9zM9bWZ^+PV`(uu2p4Y< zgzWBww8IRf&1G$9v0AO@BN$Iw%y#?LFTR44H#CiALc!{k*GREfo_ z0W6aQI=)lr2>WFA&i8_4Tl+t&1*B!oft=?|K^&Ko4gGcP3yAP5t^epZ0RBg8I zPpzOG>Iw@KP@#rOye_Nl$AP~Ye*^wb3;Kv3gjWGa!-AmNX2-P?yT#GjYJ7ONaqs4@ z#t&Vpju<7OWU}4UI35{9FB3{n1wNVFK1!}nvYeqz4Azwoer?^d-N(N;SAX}B39%na z)u2#h2hmff8HyWry~(aOgTSK&-WRNZWW)L~Mk4}y13~y5ZHRk;{~?;&+ge-Ee;w^@ zogF~`7LyT*0O;R2ELfezgu`s>GTXag^a~vtQ>XRbjYo$LoLM@1!=S8japD4@PYTC9 zmG6ZxuONt491MYr8yGCnM+LrnEAY-@d!XzyBSzS-pK1~U%kR$IZhq1MqOe^+b`HdM z5MAhSKYjf4n`0N2&Z$igAF1%qW%WuCdLyvR>^8B?>H$kR1q?H>#X>Hjl_jHOi+of} zwUF-eBm| z8#;|d7!4+q5gk-BEO)yJI`O(X9bIjXt`@*=T%<%CgZ?e?2eB(I>%r|3!pG7Dmiy1l zs#>9n8p(7|#j3CcU|fM-1?czWKv1-DiWY7-`sGQ7P@x4`i&!2*&h^oP%7E)9InV{tZ?jtf< zfyg)8|CM;IcS<-bXL#O>74vqU{OWR3eJgssaE3zvFjW8GbjDq{_AZ;*Y3%pCdmMJ$2kvmq{o2t<@$^yq*%Q}lSARHW#N33?zR~~sRd#xdPNyr?_@D0J&LCrH*~>{b)Vk6@SwBBfEy8P z_*XlKO&7Pqw(Q@2uo^0s!w{6R+%z2bERk;>uAFOxq%09B2dzo8kN_HESrcBB8D5nYF+MY5;=dqR{$fvTX2j(5ps@+! zk_h%7g?|x2m11(91g$jM^MJb;V4Rcpi<$XLrt5!# z68a!gAp)upQXvW%sV|Q@h({^llhxtmcoj9Q#9uKxP_l+0tYh$YF*!S!oNZvDh>#MZ z7VI>58(Bb=8!=UGVz4*US#@;AW*oJ2#ySRT1%vwrQ#OqmIf|WH$jMgn`^F1LM2e~+ zgi|5}v!eMkV|ml#c@yJ#BTVlo@ejSa1rzWsjZrq5z7qS7AnJsiYQ8!M+)0RDJB$RDLM%yS4hfad!?|v6L_SAq@aGo@}@1DTl@J3 zCvIQ9-`dy-rYshs0TLZRli8s++B=PiEo}$|K~)m7Iw6<=D*wc9?}jIrOeTIZ#1po5 zhmEMPS)qZ`f=dk`z=6=%Y_YYs8t>kC^u_*DOJ{8ynlmYigVN;;o_ngmQ!VyEL|34o z7NP4Y!pI&ajP$qA-uL;TSJ%toM2@0~<TOmV;_>c@UZP@be&ygAnoa^>nZ@%`bG*`+UJ3oP$FF*G`_=F6S@Zx* zP;r74h>buT4wJ#!{8<0R{?pSdm;DSZbqW&buZUwtl0u(hEPFs!Ur(C6PTW998Wd&^39i1i)EmUm5VJsbBNhd zxMtA`q|_oD1rnN8NK$dVl11cn+zPvJ$9o5Fo`2BMY;auy2oqNa0hXqgN6q_p9IPHS zR~b1J!6eHqlk1LPzCc9EL&%K+v9}^1KPaF8+W_qNH{W4>u1=XV$ zy}$Ly_tzRMM!5fn&qO`OO9Yl?+)(4}Xfb_%wdwu3W3N}e*H1YuRbHAZ8GC8#@ZVjSJ081BD)-jk{7|g9q#%3mSBZKuG zgSCXgo6L}vG9w2vQ?l5(N!)?a!cmcuv60eAQR1mFg6XmRDe=7O1m4&LUPU}~#=0T_ zr|AS(CP78$dB7OkOM_*MxUw58OXCHliTu(e{^(@>=p=4QB70;keQ1Q=z+jLo%$3qq zQmO_N+e!I|bAo*P1^W&N_8qA3Mc7j)^Uag`f_HqBZ*q2@@WGU@aRFg-nZfU{WSd!n zolMR?CTlmHwVlq|OlNPPbJo&%@BOY|$!6|mviCCt9|cOb1qLk-2p{7gmE{*3PD>Kd zlz(8b^i1RWBrBtaRF^J1_`%7RMkBg-V|_*JS=Z(AVkf}T(QOb%B;vTHVIksqQ!5O! znQb<##Dm$g#|8kGTI|m=Z|F`m*{r6{w$8>Mo}4;-e$$%wt4ii6V+V7oi7f9VzK=%X zR}{@2mMEx55sn1`Snil)o@*;k;5ZSH%!`z z*GMEi27{^oho)V1pOg=rnG#aWCnYdF5)jg3u*3#&G!%IvawfM=I?FSO?U^bdX>`ez zGpm;Gt^NG`iQ7-^8;ossthb1ge2c|lFgsBg%?<)AUG+wA5AQNNpPB7lMo>`1dOt3y zOegldceM*zeiZN%Y&{%h!{plh)O7P|{ej&_-k7?kAf+sdt7G?0;=5-EJu}7LITBy+ zOjl3~h^|yD*pt_-s7bWKYFO@RJfAcKmi^TeSG~FO!r7b6O>OZ0ch7zii^&C+M-W(U zRYp_<1>_T8iN$-ey1|kN0xY!zSmFuHYy_4Hbm)AunQrOi|BB`GNskm14$)0rG;700 zdyZVYaL>?=RwAB8?XH|VaFG_{%Y>Ye9c zNh*|3Twp1K8AxJIF9#cU=_DkmSPJ@RINk^>qLBJ!0qs!0Ax4DAlUyVt6$rhu zIK7q3SChr0%w)xonPZoIxbutq-#;+uJDo(4*N$l%pcdHM;yPE3*xXv%OBW~%5X8m-Mu9ap})gHDQt zGv6DSH!*~#WqK!*|2vxHsS=ZPQc9s5Jx^*ObXt+JUAkF*h%H^>JyOsmLXqDMmMJ1~ zMkF_X!q6o<*L`vG{6iO5Vjoo3X5)m({FcV%1G^4REJa{BSV&T{+|*nTtrYAl^Tj0W z(L&1&3M@ci3B_Jm|M?;x9p78a@zAh5(^*~#`RQZde7)|}p{p&Ajp$s)6;ZYBEO3aepkZ%m|r~AQ~0U z8mRC`V4qKbrIh+7SpKu0OwX2qz6|jzj%E#x=asxD-t!Z%{8cg7e+RGx3DC-T-stEb zgXPaXD*vV4<$s;%8K?Y_y(by#;~~5x6)H$5vqv0NEcPv8`4$RDS;6EK4K2FFKjaO% zY&}D`o59`5U~gqG5juhsBSTor6oUFIiw}LU2%qTOS~>zwgp|xJEY@ZYZ!KG}j450| z7fuY64+@CN3rJQ4W+t%uM)5{Oi7R7d6XIo)5+&7%!tn`wK*~6NX*_>)0>3O#Kty>0 zVoQvdU^fqKv15B89()2{4lIS0F~agVQF(%>0!1R8VNMpHldCcXbbTrl*kv*Fl1TsI zL9`;FpHc)yf0^E}})1`-jg8 z3|YaDZ(@q~umpP<+&#dS;5C9sd*e@)VE+zaxq-!9$KtMMvp2EX+gY5wOx}KmXd7Mr zPGCs2e?$Q-CYG8gp{8@G*?g2q{4v0?Ac#~b_stjktL2%~_UxIHuww5nNIG%#hA4p%H8G;`$>#ipAl&>MM1_+WY{P{k$T?7M zZ`PZdAGh4OcK`U7XSUbupF4T^VBPqX(0+1;n&XosBxeK%7DRIgCyGWT38C3FkyoC? zt3W}FEhM7l1Yn78d~hohIAdZN72RMt<|kn3a{mJ|v*1L;HG1U4Upif{0(womU!9}7 z{$cMa0KQPMeBrO2*<7VRTvg~s=pTb+r}5#vN4qwETrqfNa%dsfH-_#O!}3U#kfCa% zpcX4ISc1(UOdMtMyfhq-%rItwCVFJWfY+DK-gIE=@o$gaX}H_o(PFV$ac^Rm&DsTe zopwASiNW6F=rUn_3zT(r*ibk+@t1_&kFC3WY5xf)JMc6hzJJhVH94CebzZ+*|JA{B z8&~a{Shg@Pr8Jb0E%H@y-IbC)=t58+heRB~14?3a-6F#-(?Vjv5-l^Xhl=Tz!t+Uu zlk^>wJ$e1|-PbPOX=`pLQfCZZuqf~^wY4<0oIQGZ*_x~f?7i5f?T)AZ9s`pPFzHn#=F~U_kDZ%Qp1Brs|j?2p1C|aVck9czWwAUH|JMx$cimPU>WdgiqHqW z(YR}r)~yqco#^FM>;g(goSeh=feJR=Bc^{=)taR{Ze6_ZFyVCyR+iX(o)F43+S?jU zhd(|yXTrNV@uP*lO1@`?z)K_b$wSwgAaXI(5B+jv{#rQ>03K-6)JaKTJA~j$PST0I zvp8;PJg>A6diH?KF-zvWd+e*P>mSs2;gc1g`gW-816o^bPK#b|{QgG$x@CKY<<1DA zfsZBMEmP75#zduLEusaHFZx8+a}QeacLhtZ8$l@Ru8QLJ8<;s|<-%>>p1j`lxW(B+ zQP_qTt$B;tj2=IA^t*SKY${Zh1+y~A{~5t{Q%Zf|{+fbZEb}dtk%-REm)dfBz5%C{ zggps1y@biq9Kz&Qf{kqn%_Mv|(8*~)K1%}e(WfBMb(6}zTZEXh}vM~MnJKB;W)bZ#FNT8eU7A$pQ%7Yd@G)I}?EH3(>= zRE>lRs4M|U&Xv;gQHZHI0^ba_N3xi#j^X#4JaYNInxl6wH5yuokx?fx-ibF`v_8#k zO|2jA`FwKaJZ02C0Xdc7p3L@C0T&VCKNCwfwLWOZgZw8H)?gC!vbi$1DDC#K5AM01A*2Nq$xhdy>J z{gsccUv#csW&GfaodW+Kg5|$dya<+PrwjG(3t-6|N!X3xDh(+2`~sW(+}ZNq0xYZ0 zF^S`jiee5yVA(TciTBXownqQGqbJ$ILO!n0L0U#Gl#`0&zC|M6d^Q}|jCgWle_GV! zfZ!DjNgb2Fm&rk3xrM>1WpFnF7l~_GD1=b11hC|8q_b=3%*_nO78bLX!+nn{dXpo6 zjTt;PFl3-#w33#Z;HQrA&y8RX2$~ZxJys#osG$sjRY?5$nvakw8if~+tV0;pp0 z*us#mq6bg&45_h(HGSed#fu%BLKy}%?gC87k ze%xu+TX7?m6_oHn2*U<5elTJQLChi&VMh;Jdjh`f2^c{%+bl+l$zV2in)L0)j#hnp zOGoR|_U6X+#}A+0yVY>%?5!i8p4n0J@#0zUl?|Ga6+bM5oyqr2VS6TVz0=T#PFV`JzDEQuM*s;On~?%Q_w&W(D|s&Ea~ z5ueyyLv{EM9tXwp`!?*-_dJ|0zMNkU+#>jVtQ3YfUH=w82s4UMZ?JWBwi)l=d9-uW zCzV5ICx;brNwI+#ET!ZE1+{N5XfPte)Z)mMQxWs$@jP?52(HK(vBJW_w6T**maSRz z{=wbnzCC&8-tDHwN3AWbo$Z|_qsd~oVgEaT80@No*b>A)^hCgyF0dq6&Sg?aP%+|r zo6TZ2SqvTK)+e2h?mfMIss89^7q)KreE#&cBl}KE4eKutRI}WZ(UTE*Yf(BLOzRg! zDMIOsgskoM{mbq48qxK%v>?V~xu@`bQ{$yY1GB2vy}j$|`R`kr+VSYA1+6P9sEl+$ zW3t88{HXbxLl+P~tHR5I{B+D$QUEObWV#INDIm3ikdg>O;YLBtA=*bJX!juH1VPml z7Uo{SPOPT-?6#v+DAN{c|e^=8t{jwRaDFa^~*! zN9Im2eRNu%!JQd1M8nO_;|FffpHQ0}SIPEF4}3LQ&?iew%IS8Wa)G7XF9)naD1~UF zKy1eEqd{QF@QCfFu3EKd`?YiTEbUIasSDH2lmfK<@;y~tk5rLwYNA3n zYCv_(n(b##T{N^?EC##X?66xbc8dvQMZp`x(%EjfbL}Al%Mp1qL;Q;b9$5%1#opOy z4M<2BEPcSy@pl4Cp;soicRJT2J&K2x*2I+y>&|_BrKzDA9TOWm8*t!;ZmU^ud0gLe z;?TD%76Dj>u(Bxs70Gc&V2OSgdf~-#5?V9)geBO^)mMAGntlY9M4E)yQi229kl?ET zOq_yChYU`cVkxOuPAQgA3i*99*;Yocn z+A2*3iyb$7ID2l&xi&C@D;+P47+~{AEU|`g6gu0jMtz5|wMpMt-+KG%52ue_*}3u4 z1?Y?}ny!o(62!>j_DN-;)6++TSOxKGf+rPMz5OfnJR&04~<XY2p1+hG4T(B{!XZ-ceOq;+&tH?XZ^9cRW*auvoa&br^?1E6`{$vwib|8%hYMb1Q@F`W1gdE1R!TCn!a#h7h ziE|A3|1LfF6D(ggehn-W`K5%M;Gbaml3*$OvDed|VEGs0r(oHw=z}g}1yWKW3K2Pv zOVLD9QgbNrm9&UO0g4R_(RL2aPsFo@D30T(9*)UYeU~FPB*Kqi6 za%59j;Unm=dH#vXRAmUB)lvB6h0yy&u!qG7%92H6)5KM2qRLcY$WaOWl2}mIfkI`H zpaMr_5*Uhrtq8Ul8T*q+1UHeYzZ!`szvls(CL*L1RV9hWB?(=TEF6!(G8wTYe_SGG zY&3IZP+*bVKOZhC6fH_eo(HJ3=ZdJgLRzlSFIVK3jo4C5QOPOFSV~$pHEE=O>}!Ex z?=WSXnF0jidzhTv49<22ukLpM%UULP69az)Q&3JFi@TMDewuU*Gh|jk#7J6rI-Mx=9q1s~4DF7df39zH z>f6wRR#OMqC|dPh?N3biZ#M0yIao1tPHIFy0X31~5zqEWmmsjDV6X)Lu}nEND~OsK zOe>UAP*SDixG5R0#4~%viAfnTy#D#g)#C=g_2#U)Z5uxQ{Nr!VoW6eZT76?fhuMIO zNv=|jqw9q%(^VVn>K5ef)-b|zgAf+8t)tD@*wA|CYQveM*FM^HeEr)1(LgT0duNVY zIXHJ}TIgT}UCr{2XSl_4Jd`3I1bFCj&^L$*UAH`)d8kL+AHy`+VVR8-^Cl ziWC*JT_CXNtOlek`ST+bviNrNpG!7x)y0>Z(=axSoxyTGzgK`8*? zC4_=~G<;7b-wS2@DaxpRlgBLBvFYIL%T0|BI`vO2`WAzst<%`iY3ekY^wuYjS}&cs zv3l|L;o8^2{EJ@%OBobT@+G8v1eU+Jq5Xxu?j?6Hkyj?qJ)Q5J5iKYlm_2d%{Mu88 z&NtkBg4UA0#n$l@9VM%|&2HB_+n<>4-fH^lle5d-*i@{kjNs)4z8Z%R8iQqF5WIYy zobZ>X^q<9I zX>05J{zk)@<2OFr|IMZ~AI_b&W_Z!`)Ud${MmF0kh3S^U@kkf+fnFiFr9~-#ZhSZb z#98KQK9@oDHA@Vt!r8d!or}OyOwHr_sySZi-C#MWdgzMnYYtyMUEkVZvYXI$YSXuy z4ee%QyT#n@XlXFtx%71V`p>IIF35-(Eb&iedBw54lO?d`(Sp=TsX7qRb-87rlUgUI z!Slflv3Wc%5IqWE7O5i3r;J{;ZO!4!|Bt=*4wCD-?)?9=M3D#+I=qfAbb6ihj zCjc0dNR+4QTU|XpJw31QyYIg9xhH+{`#=1{|N5W*^zZ-nKmX(3|Ly<&?|=P||Mjo` z&;R+?fB%2~?LYoM`0xMY|NhG_|IbISeERe^UK#CwAm6mR%{$cY9q;t*iU#+^!;?h& zW1)Sq@WOo~Zz`~aCjiDZrp*Cuw=lZ|c}RE&iHws&P7*?c9QocsD8Ay|&Lfa%YJ=|A3J8LH(rSJG>X!4k$$ z(1Lim;M}<3r~XDOOOP@x?=z8-(3o`%1|@FDQ7N0Qy;0Y+T2psWTk)jcdz!YLXG|AZ z_5#bDXDw%0{xst_!8ngIcA;Powy(sLOAe^=BuyV-n1>nLA=X$e>PR^vt69X(aXC`@ za)Oy`8Edi#6gtrWb4eCI-pG$P@dQDwP%7%1Dep?I>%GA^*n2S9z>hZ>&(-7ivX4JUX)B?$zmCk-E(_&K|cuZc}!d zvGGZlWktlgl4OV}b3yIuYIa+_Ww@CiYvBPMVc{KVvJ5wvh8xWzjhJsag4vbWH+8tt zI#Q3G@R2J0V7+-H8s0V7_s~OkpMT-Phu{C`FFyY8FFyX@FTel6r{8=3(+}SJuOGbk z>4)$B;-h!}`lEOM2KCNgfB5!aefah-K78xb58nFA@4or-cVGYMJFoxvZ6e`Iz4Io~ z8$T)j@!dCn3W6WsL;du<*Z&Ok?rT4TKY#c2AHDm=C-1-cqYvKt$@kv*v-e*6@yq8w zy651rzQoQtPl2bJO{J~olBfeC@p^sg9xrYN0ZT`*0xA+(&WrxHguSfOyrP*~25N_y zQ)^qBY#iBGnA|;b|GjrT^UM>^y>Q{ZkKX;+&p!F9PyhTM{^rx){PJ&q`|H2|{qKJB zhd=!OpZ^i4^S7XX`Q2~+8|qj8{JUTM)35*jAOGQ(zx(Ci{`#*z{pEl8`7b{H=qGQ! z`oXiO-#qfoi}xKozGKq^eO)`-gBwCjhF7+;D;qiNM$=(eB*7Z?YWh8@KJ>a^*hL1z zQzfJn0|HgTeF3If-i}#DuHUuwp`(w!@$%V^-+A@NZ@v73@4Wm2FnPh^ z|KK}6djE}&UpfDsZ{K%%``UY3-2-4kSyx2urEzCD)|i!?qU6KT@Fko{YN%pJCz_|Ngt*{L^oL^^d>)u7%-`hfdDBzT0qK#i;9Dss*FAD?fbel^?wO+9&V5_M`V+{n6Vm{^@JyKlh`=>yaGr^^E7PQN(b&FiVoMlPAH0Dqys?5Eq#-SZs?)mm3 zXJ0)3?)z{2`0bZ}^wx_%dgsL-fA`g&e)PuA-hSmzFP?kn@rTat+;&g2enXH;vdf$J z(uh2%$PPuqqltN_)cl3_66THUqL)n|u~e*J>$}xLbYfa&OQA%(JdKe7C}8>}p733WM-iyft()Ygi-Y4(9_0gNJzW3(KAHMbSpMLkXpTG6O zpItol$=CNx^~Lwsd;1;Qc2jvH9El5WlzA*d3k(V86#q+_)Cx)qIl4|II=zv2b%jdP z>K5PD^~rDCIX->%sgK@z{?ESmolif0_tWpc|LOPN`^%5t`}2?A``Hga`13#e_!mF< z;IF^`#xI^f`q3i?&kgk)E;R4x2yE*Lj75XHVx;os zh=!G+vFTEd%FhLs*v|XPS~OVVXO6WjLgWKSi}cyRvWDGUVO$f`_4r6(cLJ7zF6p|4pr8!%GuR{-@yfw5j-__MU*1noFV+m6zvW7uv4n~qF_XzsYt^ew&RcD-wxHk8)Z z*HRrGbfU`u?`ggiOh^GWhB1&BowunbkhG&8Khcr9ht ziM~kO)=*7pDm+9v59|4(jO`q2dyclA z)tRRCrc*}qN!oJ4I3t3Z))N@c3S>xll4y}&2}pTHZ#iuwO+;A^gz>Sg;~Ca_m=2BV zs)2ID>ULHWH_Zi0aa&QE6$C7a&2bZeC8>z0M*G#S#JYtcb5Bcf>$=pPySF|$IsDAQ zu_FgZp9cG8-{?J)WA`1Lc<|8nhYxOlcyi+5$?-=f#~+&w-hGr z%u?1y-`Z%rwSigQWG(M>suONa&ZF)2XnMd9bSN;vl9=W*NGW&jg&PE!w0Wm84WQys zMf}E8y|XXhyklF>gS)nTYjWg?eZ!CK9e#A*$YTe_zj<)`qX)+y+&yr3pnEdcI9h97 z3-@S8S+aN^v*=n7>~g`ik|G`UNV*YvU9u#PJ>w(o6X9TBJ+Z8e(6_<_Yt-M?#Fe&% zOog`4=4|WsO@+Jm4t?|fLsLf{ed)}RH(xmO-8Y{97;yKUS3i00jURpYJ3oH^%^$z> z+MmAh(uc1+`|k5+-kLu0@-vT~zwh=VyN4cFpWhd$-x9QDc&f{|yjguqtzmhS*O-n} z4Q%PYYhwL<`vxCAIQsDI6OY`n;uGdo92_oGoVooYX z9F+ttH3=sL!;ToxPtjaWx5A=S0*T5rth9BKK^6;LK2lkIXcwp>d z)ab+eh92Bp*dMD~Utx{gRP{D>qg~VL)<-=0m`fkWMvDqkuorIPh~*g{CHdSWuq4(z zGNGe9#V+eKmqml7zG&_EmY#bjHa;{t^vM2^d-sog12j2y|AFyG_YB`Nvi?B6ZMfOB z)=%Z#imY3a!$+(pnsJK`x}ay#GDhprofhBSi6@Z(*v*ltVfsiXpt}hEbZzzuZ;4F2+U8o({%(kuZiy6zW$yA zqYvG=>ygQc`*sZ--ZgOFo`J^>jT|{Jd~Da|XI97VZuJj_Og#8Rl{zqH*W#3Y_tv%upA=7kgBE`uoSRRl1+X-b`yZ*_!UJyP{M=H2bPA_GhnG& z0?P$8E8bP?i-jGNqfSiz$&!{(1-FQoFlafKqF`6#t;(F0$^|sZ4t4ulZQWi&;4#`h z#R5;#r&;l;enHf3d0 z*-)iwb5dQrI%20{Lh6wVV_LA5Z%E%$#jL3_Z)~t`X~G(dr_e~#XPEP%nrxR8x<=u0vkldmHdoQ>0-9d9D?5qxL+TGpjlzYB9g3t6w^vgR zP1>qUn)OkewyA=uj;RAf8sEKo?=y^Rn&qci;BEFaDH02KDeELHFrn!vHoY_fPfjtG zDN@U4abRgWqsPxAXljCwnx-vN*f7(1nD!1ELJ3`6Skr12b1X47PXJ5eSCMUQF-+xV z0ZUR!ifmC6VQO3%ja+7_H>4{h%VZEp`wwD~7mePb=YQBbpYq{%Z_@7z*p zSy#dJhnVgVQwTA6P?!bfLQFPD6EQjRdI3elxb+kDh3FnIc0+U?-Vk6j0X7xjk|9gF zlF!z-@*#7^txGu7QM;9Q4~FHMW2uA3+Vd; z`X0Z&5HJ*iG!7k%Bw#1XAPT;+S2OF*vS4ToakEJE59MjBlH(F{0yq%@Nr5cO6YMQ9 z=Br)IEnVzwU=wG8#@+_khG_M0p=0;@?CnFV@7=!nk$uBY0-W5w{hJ5J9^E_m;P{5a zTYC?zPVUOJk49>@GR>zez+m!82ZNzI#1lUB7OZu3Y#}M%t zI=ysffQy7J@hUzQHp3N>bL&zL3NHkZ9jP)ttELW-lfnc=Y=Njs0$4g!I2qj9xYrQ( z8RI^Nhy}%bbks*j0&FbE#e-bJYmC8R@TxAGs?)BHI5bhWF7DCC-2j#pG8iDGAh*0C zspQzXtlWDU{=2O-Z7s>#N_!lNUa;(a`n=zm^cf>QV<*UOj0WgbK%enzg+fij>Btc$ zwvewVH*j8LaOr0TOJdHYME;>N0bRbr*aKG|C~WA3`<*BQJobhR{b55tJn?DJ%?^`+ z?0sa!c}oe(O4DXBU@5;S|H)jiB+5uvw+xo#x=;y4#i zj#*K~uBNDeP|QRgyNR zN)o*?4=l+(ct&VR>VfMK&b2P*BY7(TmN0K&Wq`>nl)&}s(g9b_Zd$XmdcM zqy~OZShu>;u(rauE~s1WRrR`*-412msm!A*k}4`ZBlJGS3dtA~YgZ-h7*5{p37mIqT+hlmcsj{tHv30O*axetyiRfVaQ@CLYNHSpUim~~!F zk4u@AHrmofYwsTySbkX~fMs#qLO|P7VO(9yZECP=#YPCWA&DwygJltJ&5QRN|4i|v ziwYoI{AYfK@LB_2Ovd9Tj37eiS>|22}6oglz^oyDKZvK`H{~6mY+c*a10HW0bt8YRHv@)rot22z&%FKQ;hutXF1IR z^_iz=6T&1G&b5F}(7=#bgXb6#Y13lGGCzyUx`a=gHgNEGf;c=+F_yDN%Ne8X6m7qk z_KX^XNnKrqrqx2ltynYN(rF>S3jZK*bGuHrUTvK!&C#vaQxS2!bayW_Tn|EZeHh z168KYVP?Ho+wW56c=BcW@&w4Ph}#u0zC3Cxi`dHGF=oTp;me{NWeF6%66ecfDD*W& zZHg|dq7!X>D&o{eom#{RF$Pj>T9^Tmf*C0ZEMcCb|4K}{)201}tWTfyBG+MfqR7tUu{D#E&-&Kj z=B}!NSk2aW?dE9p#?FfME&kQ@&fY3(A#BR|jW7stUKuf$wzDhR=w&VD(l)!Y!>R6a zX(BFd#HHzSs5@Sp zn)Ql^Rm@%4`Tyt(FJIZBU{oQN3NFC7y>ym%xHMKqZ7XB2f;r2DgOu$+Igq5-_jpZ@ zQye0a%_t;9WCe~QV3~Alqb^OSUDak)G@DB60WZ0gwdS&VUe)B%wgs4Ir6pbG$TxX= zTl}k9Lu=c@>)XQ{+QS>$gBx1?>zh1l>m94Bt$krO@6#ons;ITJ-Lj(9vaAJUUD3vu zbUMqUK6T2cPW#jukQd-Y33!vQLV5nISz?#7z*yOLfAbjN3tq zIIMm!)O-nE;Fe`5>$13GW!hN=Fc0f|##Nq1I>N7?6DyjMZW(S3DR7Eae9}$|s4~IB z2ddy&$XBpyoA{xqe|I8uAXRaDJhU$o+|?D>*@@cG5!}%c+SwV}*%8{&9@yUQAMXf^ zcZIe`D|g0#Co2Ia_Xv@t(a>H{JdD_uteQ+!9{?36G+s~50m~>H9#IUBWPhsaK)U*X z;I3?SkJVbX1P!a*YT}%bJUYc!+*Q{SST060YlqM+qX;YqgkqRt@e-*v>>m+WF47BH z9Lgvj%nVp+3WAAWRHWgOO>(?5>*@7CyG!jUUjGR;N4QBzk$6Zo1|0g8S-&FXQ@{$2 ztEydWI)8_nm8)@ho5fOc;;1~a<4YE7F}lPChq zjAy=`Elk>*7c9j9GcXPW`+zS=@+(sIWf>l{9F(>#Pl2qWgD-tXm61S|=w7e4z%(^lP2WdqNhynwH?1~7gyo)dIvX!-4OWQz}k~YiA z4$I0;3mkJvm#wr5lOfAH?Mg6hJ3v62E;Jm`hy;PPhnlHJBJ7*YS$Joygg%P6v($M~ zbhHQLEX~?(OIU7=n!gsY+#2DRN1dfHM@f`l5wR`rvM%eyS4t9|a^gji08*#}m^l?ukL`lH=yqGEBiduQ8+vHl@a^O zE`CL)ZFvWeT}GqMa*-{IP;LJG@#@zeEAo)zox)xkv##j0EJs;abO{%uWqF5rS-W{z z2dqT^nGP)PgoU8U%$)TJ*9$BK@A^!pJ?_-N{Q|%e=Rm@vi@7ur2i3`|+HrfLw8dP~ zVk&7it!y%vG{bXCX{)Wg9i?cqDPVr$Ma{#iQi^kutj2Me)i|-2C&)6JaFA_5XIaWs zo^lfl#4C0_BTh@<*u<2LnXxSb%hW7Uq%)^BDQ}37u+=0F(-M|PyeYtcPg#~F&9^1Y zw?)mjb-}&BhRb8rUJA1%=2Br777vEJ!u%BF(dNC{0;%F7fhDOJxNUeMll-~LYjB-Vfp?*qlKPS5^m za9=dIHx`0d_LDXqs05PdZh+4l4wjM7ZUHO-dea1Yv3I3^N27hHlHK6b_PIzn&lN4+ zC6DEG(|>ZXTtrfwDB<%j0hY=uyDOK#a`wH7bgcyQNR{y`Q~vU}PmzRIoa!8pg$*Jh z6+lt-T21&qDtJ`qeU^4!e!>1fF+e6DVJc2gQ=9^wK-0k zV>D@66L)CZYP5CT`p^!8_d&+}4Ck2QY@|nsojAzU^HJaTF%kdM`+h>W3ZsBtJSt!H7P4;Qv9U=%i`2HFthv`u;a62*pt$J ze**K|N^X<$1^QoMU;$u_EIrNjpkXj*_GU-c}NKfZc|V@JhP9LZap%Bb%`xQ z_2vPX?X}$IYIb84`YJb8n>N*On`@aZpc-Z?sFoS1=LQ>0Lqvo1+yMNl%CIq{S?y64 z5UooD#!lEvMe!wZNl8h78Bq}6oR!E{79)Pnl&vgfDNUM6;-->>8Q!T#348xuZPu@a zOEMqO<%_}6sm2N}a#uqEEEkj;8?R$18vfH|5$p1ZWm%Wywl34xI=EZf*{`$81TWQ8xlCc2!%mYgY z6&Ku?GG2;cDcnRvu*6tFhce?(WF5+^LzM&Bl_-a@$D!=!%X@8Q-L|rVUD55tmX&>8 zUB6e?$bN*O0ij}@S_yCmx^1Et-i31>;fQ3_z$Hi%vA46R_%&c?u>@FcLgWf{o`$bmjIce zU0vaQUEu>=!P~q1cXs;j21SFn$HNDS4q?Hb&;h_p&^)l*brXW6Em-1qppwKEq6L;Bk(>#yGVM|ocy+;w8~KrXbz@pvF{brDu60lA9WT+g z7g*D?Cg!+_eVQ{p#aW)=04yz_X6}=v=P#9Q}Y$>!BNC^Qvel^AodNFt=Z_^f7Z9%Wiv)Y7H z+uo|JU!$wsYYaWec#gBSlbrPg4jK%d`4|nd9H(t3jkYNRf6Bn0H1a^3$5?#NqS}qn zSifhAv7N#Sy|#0-!eUH~k`z&uqJOV8g> zu$;XrrezF}u}%X)mJ-QLoIr!?m&CB`Kd*U5O4X%Ds@O?ngwkQ@I5vCxf5 zk}eUXQH0PgqR8~bNI#W$a)pfpvi(8&Nl0KB(Dqc)t82N9ByxN3(qK8W>p_r`REV{R zsSTts+kl{Yc(h{IR`|e1^Hxa%jh1cA)}a>LFws!6bz7rlOC7hd%D5(|?Qx6w`7=k0 zQYL3FiD~lNgiDpcq&QU4sS=!fScL^EbtyA;B|PR_F!(?t+MExBeHU{gfT5Er#$j0 z+zqg&irST(yb>Kj*77zR4Bd)2$i6b+C;{qDxqzn1aa)8ufoY$GvGS|Cv6Vb&79ym@ zN@qU>Rv^hD!zS-eWw%4o?NFw%6Cj1|X!QBuiAy-CIOz}=$3i}E9?4b$0n6fYU!+4F z33c&kx;@$+kc%of)diQj$EE5+yi|a?T|f?0pHJKG)Af0=%u)`$oy5f?byK_oSmF~* z*+}^?JS66)qCRyLpDWW|KygI@Rs$ct0ZvfVt%|tSpqNLUz)ehb%2Sk7d5v$%#X+{h zI+hX=c7$AIp$(&31tbZ_2~V)nxKjZ?#xbi|3ZNxX8&}^^Iqx`Sd=V`kW3jsbVMG{T(UQIXgSmv=WjvAJoBrs=yE>v4q zH@i1?1%{KA6UmD0$%-9`${mTS9r4QTvC4@^#b`%(q$4!aRWT8*+!e2$OjI38RNWa1 z-xUkp84ur{s5k^lR^ARuR0uyFOjI05R!$}=_Y=mu`8<}@ld0;-Sa?snccR`lfZ3JW zZqmFbGY2d$wdgH@<@M1Vu*?T_eO1i52FsRa9_8+DCdO*^NFvzk0dt>&rKZgsyOdvk#?R}7Z28IcQU`YH@-YuL^8X0Wh_ znr*x{S3pOr!5z0_Ia9lj%J>sZFd+wYjxGl+BRO3 zv{D%-H4iLF+)+`#1l+M+O!1!Uuqw{(KsbY%f`rlb!>}ts8L%%wewARCr@d0i89AF* zND&l&1Xk3bJfw>~5&W3;X*2Lh2rVv1G)yTuksE6>26eqyZpyTYZ2w&bEJuo*mLu47 zL;y<*mSh94B%O+djAHDBNp=zk8m(KJY_R?hH1pe9@WY2%?L#g0K_Yl@OM_)&4ZAjM z>=hh|gnN?_TO1ICKTn}qz0?bmdp(^aS#Bu9Rd^WqUsjT|Se5<3;UNxMR~3da`fplAgCj1#AHLXhyIEUegs zqX%C+FQy#hazXl4zzoqAe7bJ0t{aon(36?NJ`E~t?18;KsBW*O2W@nXM3or3NK$r- zVwlAurSmH5h+~M!?Qm6gdDQJ5O^a9C;nzmVsex(JLlU8}#|)`m42lS65UZ-Hlk;Kq zx`Zrc$l8_mV+epCIMFF``$PG)Ns!Qzktk6dfh851x+X^}eQeRO0KF03}XEGDAcO(dK>%|{+hQFfDvyCMnk-q{<1kg+qR9ML zlWB?FL<$~F0hUA$&gzU^1v577)#ocrs~Q}eJN(13&;%l7co(X2XR->FsM;Q@9_y+c z?yMM!REh3wFi^c2NRV*j|Y=g2k{Xl;w2$Wz{>;iiv6T)&%Ole2Ig4q z5hQ?RymDWPfMq1Ov)MUP#clBG`_Yk0HYnYTt}U_zme)a75iE=G@{a&4i=!MzNGH$v zVA;0>mW!ES3xOrJ8*ysDKEnieOa(!AgAtq;PzUZ+K26@G>9%TnIbDI(0>H;=G@VgR+km#}ejWd9 z+A+ns&aym=+bJV`l4efPFo3o*2$tB{@^gWuZ4Ovor0Hj9%VDEyldiH&)52@w5?IO( zNg_;ZnTd%K+GpQvU|HOau-J`>Hi0T8i*$cUdI>tZ1*QN*xLNJ`3^+!AY{feXfm zPX}O`lBse*uq3U9`>NS>Qe4Sm!LmsPOY>m8d0V}CfYkjK!LrFV2+v{VueWS!oDG)n zF90~3;1vYRtqqn<#b7D9&HpPB>OqlT|^O~2dqbfLSqhX>r_#ORaU?!mm=>} z6r4)*t-+%U3{Z6s2}=VkAqm40SjtE_1D5JJV40l9 zA`S8Y3#pR!*uZcHa{JtpH>}yJNYpYZ9!BX}=7ZWDw#)ea%j zDY%q9I8PK=awIVXOLfGfhQ}CUgK7b=yw>a3OspvhX1Nqt!sAT>mO`hTqRLFgUi){U*+(P(%#uwSxbf2!g@s^Va(a(}XNZ?bZCqH1Tn zdV92LG*UH$sveHlj3sI(616*$)qtJ5l2v4oMZWO zta*wv9XFYtF_=PsRZ6;;_nHF-3hCS8oxC(Zh_ zLkq;13#hU|MJiAp_bcOMdp=cUtc$H;a2p=jQrll)TwB9#B=t5&NU|mNq$%E8nKyf{ zAy|^KwBwj>X&)uEd9s*^Kaeoq2o*VZd9Pc6g+nnjM4j}LYPVqi+BG>F-er?M zb-YR)$x-!tH0}oso}-Kx2bMOUHX2XS##1bNn!x!fgXOr}MIvMVF?@Nky&dlmm?h(so>)Au7@_@@4|d+2+nnam6`_ zmlzz2MgT!0;&miWNSxSi(L55|CfLK8pa^>Bcm86U@)8f}2q&VvJMtGGK`s7SxChNCb~1COZ%)g(VJyW9!TV zwWh80*1;y2Y^bp&ezegx(qJ8Kunjlau|r9NZLo%T&f!SBSXF4&K+WxqP7F2DP*HY7 z5TX{r5=aJxG^GWON}y#={#La4l*o8~DmTNHq{AVyIsrMc3agZviEN1|B9@lLcLHZ> zlVTS{bzBhXJehKXp{dJ&Fx^fgy4NJ7#gnLlgU>ltd8ex2RCT*lJuU>xd~xt(F_sk7 ziX^|CDYGfBhgm7auGpsyUp(%ZQ4&i5VS|C3(9Msy;7Ir%2?4znRelbz6hA~w>W*lV zI7%Q5$|=;m)ur9Kj7x`WwG-=arHbX&l3pN~_6CO?b*LjCxY%79tm`XzFN+s{A@DmX zihO;r@|~)LybD9BH=&=?qe+v^0up;n3T$HWDn-t#B(=l^7oreojbtu*s$H6>6WCAF z<<>?~1k~LkLz0~xQXPsQVnXr`EvhOkc3*@G83!ur(ssCY@GlbBU=YJ@`&~*9OpiPq zEu2l4G9tyACS_-6saH$r%4xc z>7p)O#HsB9xwKulucVsU_$aQ^Hebc|j0~3Zb}LeZHnD;$9GhJcvn!(nEMp#R+=H7k zSjCDcf}4r3GLSB*ZuGgOB&Ed`Bc!LdlVqGq>kQl}QXXx0kY3Z^80-w}idRe~D-I^Z z2UFqO(-n7uQrL)cG8Wz!tK1W>-W{*r8LgU#R*pp~#^5nlHIb~|k*Wc(+%1=cjfKTV zBcMdZ!C2@ZVao&Y@IewByZ?rRr4R(0u05ElnS{e`b&uAVHwE;)fZW1BUD04z0?X?v zGRo;#u!CIirIkh>5HqUFjZB(}vqlt1=%0xHSvO`z-u+e#p z;m^>HX@)<=nvZejBb@me%&WwHiKkcwsB)U+&ak$#jQergv(M;WrwevawSKCN)5K_9 zn$umd1XEGE=~M>1S*Mz*XltPN=Ty%@vO?JDneVJrCzN#09%RSBPn zmjbGR9gh}yGu5)53hvhj9y10`(5|zzb(*G6F~$=dbCNNgGFnaoSQ;!xG0fPq$l^Wt zhYUBxSWh$d(~RQ`!=Gc!7g+XLmOf6KA2c|Jbm5q`(M@&P)JX@qS-OgPn%#t8DQ#NM zn!s|u-(tK(4~&K++F^+W42JY-uw^!ahgt~sLkE|Kf?Hs>xY3Tbk)Up;y4#^DI8=ED zK^M{pJ5RE4;$ps&m|%(jOM-`7K--5^rp%j#RhpDo8zgJ;2wA(vigPSygXIY6KRhZz zrd3QN7TofUfR5(DI`d$yX{a9F!*3VVXq#xTj@Mhq;IWCHXtGZ<@}srpZI$$ffL16| zT)@ai5|c(6(q_e2M-=JPsLYd&_8G}YBGwq1^@3lKfF-hJ#HEg524+!hZGZ=#D(6?{ z{c6l_^olN{1W75pX z(yj!7(G0Vw+oS0Lxzq)rER7SPrQlsC2=-Fx{g+wxc3RB8mHmpuSQm5Hgq&NUmkge05iE0< z?}|%@;E_wZi@=ibWCY~Vq1>XgI_ARt2tt)4^9}2xXo#nDUMTFsV2QK3;8J&!;B8>( zI0|PAT!Z@hVONRSH+Jn`BcLXOb7`>i0$P-~yW_yDg$Gea3x<-c-TQ zh8G~hJZa`kI#*%v4!JF6X0v5xp4aZ`Yi4Jv=*T?fde>-1=1#X4sc?r&084musxjJvC`t}KL+an=T&gT4iz?Fa=){XrYF{Y@dPtv-Yf-?ss@k%- z#XTMg0fQY%gbyWxhmxV&Q{lVP;k%QeyJCTZ(cok>JQ=T=OjJ(-VMZ%nBBs(oF79gX(EN_L$O z3mRobyhmGZ2`q0KeF3l>`6B|$;!hZDwnCTe8!XyRgEq&;smt%I|{a<~zV^6LqfVigv6krau=WXpQUt@e<{$}U9~zXjR9 z2YJ;AKei!B`bkL@hdOChCxTR4CsnmcTXBaz^rX={P1~m#4o30_#~h_ifRrZ?EUm|A zOkrI#SaPQrW{NSNW_SS0)9AOfoMX8Q1S}smI>+?kl(xaEX}6&(CQGuOZg#MQ!E`H& z=WwGo{bXggl2=>s!kR!8+*CnKAyapIC=o1)n=6mMqTqQC2#iz#RER??PXeE^ z1T2MKGAUw@3hA8!Jiw6@g1S{z^ae6Bw|zdaoDptS2$K!o31A8H3LasCjW^l0OPYWm z1x&qFK$P$E2TFG?ozk%^T~bO5ES*a)-AJb(-5pE!(zS%N%F?hjQVK{nN{OQQ_3ZEb z&&9cYFXw%pnR#YDfxM&r^WYpgv?Fgk?n!iN_D3RuH87I^rYuU+>8l9%qJhWKq*xj` z@+~~5t^gzXzuTk{5N82;nX<=Kgo|ZJ1Vm#PApTBLkQv-)9J$yKRkiHJi=ixUGthHN zpE~(stj!0W$-3g?Z9#YTESU8i1f)v%FZ-8qvhbAP+=jW079nU{V+bYb$%f*bRt=oq zO8v(X`-)GuoVC7lSO1WiXeemQumSP2DYmva3En}8Z(wuVaKhCxzTV-TLea`wifi~G zNxpzN%CEox)Gh9hJLl|XE(YOA#q+_ti#s&I0NZK!Mwn_r8|O9S%f|HXDDJJ0w-m|EvT4M@wOq4t{o!h9EhXqPA#v#lWu^q zp$z|)%KyMzs@I7dtme6}TVg=_}pCOulo*hvH=G=5s)*_Z8uG z%V~!L_(&U8kkZm(o9R#2cWw@fUr&%FX8_1fUNJTdp7OWJ!h3Xo*zeGN_lWehv=}je z$xSmU&CQ{dxd^o&q=G6PVc`vqwoyp!z=5F$bRSBI=W0hSq<`y+Or zIan7l#S+b(3m;|Q>6-4rr;Zk3V$o%0YU19I8|4j8qcqc$4A5d zX?_kY?kW>0`YU4ExPQhNisJv>Wh&cN)1$d7EnHQE%$nDZVn_*@2 zZs;4@nuc=5V$>s8Q=a($v8(%cW2KJVi<6snF~v;0s36z5h3~4dUnz7Fkc+59HRPLD@io6v5V-H=i_?}W9#<6W zm>ZCl{!#)=@6S2~9}RI)lSX8202DYiF6lA_68L(JGbdXCzdt8`AvN@d4Dcy>PdFq$ zcxML+mHiwNX-qNG*t?(;RAn%f&N-w4;zntwmUI8W>dir2-1g$x4W!umm_`^IGQP^O z^t{dHR26KZM{MuYushDo#i`J36CZ2+`p~vH%P9tzPgoA&;Gg3{0` zeopD-N%y_G@GgZZGR3B=85_$^m0ZS%g`Iw&;OVsVHpeVN-fAaKF>;N!s0 zh~BWhYtP4JiXhGFk{bY5t>2h@o7`8pb4?%dsSaJ$hO7(a?Xq8+`x(ov@zSs23Eyf4-C2TXVEkxBSau&G9Jk{c%gfDT+ za`oeG`E#o}RW-6n8^RUNUknbcSI^%Lzntlj3OsQ4`oTpNGIA*IVL$JCDY_OJ=P&Qj zS+V=8EA6Tp>1VK@&|JT;e94~?9@FvFy?D_f4I+{ol*Fk~w3-|sxc>RTbYQzgj#(W#o8^K{e2p+gdFy3~x zB*C2?iV{@%%h)a@Ks}K)3}7K(MJr_8m>38*LhWh+QcWw3-kxUbUWO)LYl#)q!u5(T zd3BCCnIqzyGZ{hkBu{xuk)K^(#L*0%E{?A-dN17A9 zIq!6R>)bMA<_kYgKM$ghm5H#{SkFj5OTr#gbAL?%rw0CXRBJZILwQiJKQNf^EvKzY zx?B{?)2fWLXr*;oN%WOv=jG8B!{-RTvi&n{3zs?22ap)OT%}rT=V0;e$)Zm|^4RP= z0!*EY1SeCHJ2b6mTpGuvI(D_b*fV)i25q*)OpQ(O4!4a87S76SxH2@@ttY0vkF;jZ zt#z59&TgU?@30(8)tKck0B{8)WLf0T2UpIu(2Nvjebs`VahFiSSI$8HmgU7|RS@j2 zZVUX%<1sz!7SaQNgeE{gWjMF{F{u8;ZT>J%to?Xe{El}VS|m^|zW=tUi108OplV^7 zqVpxbG3Pc#DL>UBkq#TCHYxJYqb~L08-<>OGqMEbWQE>t1kcLE`Z-lTwl9$6@pU}w zymyPSrR;6v3d11-P5Ctw3+?qP2SiEGxKz9Y-*=Q|`;ce~Ys#`|(ORR5HV;7pW&saf zXz7Plt3e!yg{wxFx39L}Ep7~x(9D)RqI5H`tVHbnb1>9kQicvxOV6P>E`OX2wwY5+ zb(CM02F#2S`86MtCq1Wfoc<2_KtH{tAI8nfw0WhKI}_tuA$6{T;PPem+4CUIuY0G{hSUggAyM*pxewEiz<(!f-XUk+ zPn`Obf-&wZAebANp`)rFmDfRG2acQlD=u6uas=2eobnqaH2G%51(|5)BcyY2tFk4u zRzHs7UP~bT?ioaCCkpWrPEJKqJ|sblEJz?WH0Xt8KKEA|E22K=ZKRGZuEnyY#;>m; zOIcRp`khcbZba!qR*l(o`Xerdu|!GR3rJ3YoEY_*lBaz#bW?|x(=FCK-`vOHHF|a( z8Aa1e1;^uT%tBomRsJz{@7Y1=E1k9jp6}wvyOjQ? zar_cR!l!)&_X!1Q1H_>4WzX=an{P`dp1}5$f_1!ifvjGsxhYu^Ro=X-C-5*0 zh*`0tWp)_7{rf*^(cEs|dzzN}&@)6=6=7My)^VszO|x9CFfPo`QW>p-7R1!a{l02s zgXt5^8){e%0E<8Q1YaOVgTsmBleIU!OQ3(Wd-3Ax4j8|}?#c)h43pGdxy(cQeTJ4v z6)!Lrtw<0~@=+SsV4Cw(W=Lmi%tlV4xCJXLeByEU%g5+8AM;}#^z=r8pXD71I8}DsF{3-NG z_~WMmS*T`hE$qk_xPs z2qgdJWdEG>>^bNmp_m-jkE;@-nPsA<@v$k#=2Z+izQ*(J-S>2i*csF}J2XB9Qa76U z>jDefNJ_PxKfKL1-GYL zx1(nzEh43(A_tk{l<9x`+V@E}_GNo3q1zXhV)VrNfLN$gAuV0n2|*LJjD?ko&u^Y+?W zV1PywUSOc?Cqaz~+y%f#PAl?)Zuq~r-=1G^q`#K$&ed(gfyEiO56qb0JWCpXeohQD zarsD^x@qpBcw2=9S=P}s4OvAqqafpvm;^_0)6ECgrL9b8g$;nopJ*Va_h5{i#rCKq zj8sXbyn-iZKc>FOC<~REh}mM#lB^t1M>`}3yi-~)$ec<%8pNYpMUd)JzM^B zcYY4*Jk~dtYd=3+5--AU3TQSR%>TRbAN@f~+***m@Fn>0J5AzW>cRQp%I{=nf0|C; zZAfK(UE8Pk4y+6nG``6W(Hm2n&UhwVH@Q!D@^qeJ$?Cu1myu~4(t#Ec+v)5`ur$+b zCp!;|Ft&01erycof8ao*-8MCt6kRvjOP*_3taR#_MMz(Tr@X6h5nSjvKA~U1op{6Q zBs*7}(Lsv|!tIeqS^+?Mov@X(z~W=Io?7(mneLp?j4=9OA@*60ZrT>+>?R;toMY8}Y!W5<=^s@)Bye2Q2}NtEuSwomS}?~- zlS8!TgZk)wE!K*pOz78fx)pqAty1#3n30AA@%h7I-looiP2DPG4J!f1f$4*3d#~t! zhORxJCC-xVgvFTcz$mvh<>6&C`2&vbs_#7!EsNc9|GHw2swIpj8wfy}@4uP6t0UEU zT64}Z>;J!)wq>HDYLRh%galmH=GlI=_SjxLXW`lA|7nc{`uX2YbnWi!CBda@5b0{6 zG#=?+h$SF7INO#jyWY4jX0@M_mM5AGOliDR4$G#BFI*U4UzaajB8PFCTe(EJnj7F(9Z`>Z=T{dNW>fnM&-*f|Te|cu0rlUZoc__r^I~g8X;)}ydMTn7 z2L?0Z8tkM8?GZi^KtmIb>oo_nS6aM^B`c6Hkz-!-$ljf=t&NTF&({AMk$yL3TU&TX zFMydZ{5>PP2pc-bh1zD})f>~{X{_~x&9tzJ{;ybqVN@0GBj*G1&n58fX0^}#0-fhCJO+dRPDBSq@l+$%TWD!?jkewT$&!MEK1;9s$SO4gbwuC zrn#+TJ@AVpEWkCz)NC3#G)ERk*iM2xY^jqT zj%WU4XGc@PbF$*NOUs=n9BlXJM~h}z)jPKmA=4UQ;xDRYKS>`_y| zXcv@jW;tvsI^!q`Axa0dpY&T|p#(1cqmNqlDgL1qrgnzj!E&+5{K3$(zq8Qf_a9?Y z3SSi+Hl~>uNHYy=Cs?Jkvr2cjN`Lw$f%gq+MPBHcX#vtJ2E9t}ajSX6O$g1ewG~@3 z;#v9I;_!)n>ioQ^QL0_m&5SN2@LBuS5vhz#MTduBREw_DNb9ijHD(}(1~(Q5q%Qv0 zGZhznSxr z>4h0?liJHi{|J9o)Y)j%BIUNEhBdGTuM5(qdZT?&xLjhBGwerXos9*#on-jpi=%;3 zhPs)PK)$U$hNHtSuHl+pz(tD(Ld7GhKBk!CpBQ7HAL{6N{Gxl{{}*wc|BJXiLVE!d zT)|^B-sa}#nTpfP+w?#HWoX?J;N$7;9BX5LTMFG|*xET{Y>{aFc@|!VR;-IpPu*@Z z_Pr@bU&u36cXFauu}(~{*R{Tag~IS3JyzsFx;L!LV}7(IkxE~V>M&8ECU!?4BSO%U zwfXBE!%=S%CR6Ohg|>^p_o+tKy$rWS!?%F=Uznh5LCrd+<>vqXZHANc^)`8AhPS?s zxCj?UJ{bRC2t3jhfIuzCMbPyZq$$zGJLC3`3I(d7X|51Q}%)Zzrh;TiHK>B3)XxD zh!>ZTY)z&k?xuc>d2cE>7Fu^d32X!co!`Tb#C(S0t!yb5Y=?hb$V7T|=lF?;3S7d+ z6$pj1eZNmAFCq983_fm zEOK33kMoK*^NWQgA$27~uM(wN-)~rcQ$dL}32xZ{&qlu8{I_AqO#bOv63ahUpjlef zOv6~n+0usk1T$pbP1k=waW48u?X?~$G2M^xz!G0c@V`%=3oUeqv*>yN)+Pf6!P8n5 zq3K^c*Su_UF<{Nvlb!Su8DJwDPH6IrPZDJ0O(YIdYOk{!bWo{$MT+?ba+scYlDC$> zeVhkn5JMyIbe?zQ)h)3@&bdCmE%y&-co8S|G*l+`=l64LFs}@tW`+xq_ROUi4}>k+ zbZ<8o?UYiz(2zuh1^x}M)tkJczts-<5e04v8TQiiK@>(Q z!YL(M47Zqi>6{bNm$FL`pLW|ILJ^RFPl9nvoMjzl`x^ZY%{)9v^`XL8 z5M{rLhF3i|hbv-B2&TYhI2+Av>c@gAqQ(Z}&F1;Ax1%k$5L$n(=~KPK$CZJn<3!{i z;h)hGj9-}jp+$AwMzDB>`*_={(&K!ZKIkK^*RKk-=1Gec}{ zMxcbmnDqGB)kAAI2l_`x(XBFJ$hR7EoESE4v%&X*cp%Yg?QL*GRmRV+jA8cBQ@e}D~CQL@+kO8rF$ z(AKz-$(N?R8o3{ImA)tehe@%Q$G)=^W4<2Nmt>Z$BDU+Y(A;hD(#ai1MO@7ED z#eOKQs3MFxYc@TgVL$k^UNkr-U=l}@=PM?I0>qfO?VYL}T^Xq(&iQvgl{^>1pR`8$ znssc`XcwfP0qq8UfZB_x^nGKsbTyLKT}fXQ;k{h-Y)`o|sv2j6ea}i@SwkonpZe~f z?Y<0}XBTC6d1}Cp_=OoPI$saK%l!=U&g`nqy`0pv|8sDY(m}Dwhqsu*8V6=nbEwM6%AI>@{1?&bDa->bDgYLE1^DX>4?}!U95#Mn_5w0b!CgZC-?@PGiDY{`KKfP(`~bH&24^>zjFJkN z|3`=z`=REFfG^xw&wnVv2Fu6P7oAVr=Gu|KuAB`DbUtUc!XUU0r>vouhwQ){yon3A zI4m~+lXf=LT&4gIl%2qQOAi6WF5Um-lS4uK?HicYS7w4d+`7 zD28DG3_I^R{?%;NOxCqnh(h&;zQsmt2+t=rT7Y8xvLi9z)lmR}I@dS>I`sf(UWG z#O)`>9jYk1*JR;%0RWYA5++1cxjz?kylAF+iIN1d?7J}DdzNS@hl4)y8nhhIb>D($ zg|NUmRHi;7>l6@OppwigDXUq`q!|0bvk8sY@|Jq?0+rEpLdU(shOxoFs~sjZ(_{`g zHI~v5*>P7NvvKH-#+1IsIlxYOcP27jmsLa`)D(r2&ti@qd17Abb%SkJB2{nOvD_~9 zg>P3{x>vS;fmCjuzW(lPba^< z{Bfvz^19ajAzmrLaALprkpEYKui0}zUR37J0GPjEwwIh~%B^35sIO-qv3 z{077xaS?Ow;pVQHs*-8srp3ldYetr{aFW6|zUrEH@_snZr4B^th5gMNOe!IW4lxO% zkS(CcMI{#~te+UMk&rN(JsdSwhhJKEoo*IrtGKW(h-I6+p?q(J@gZ6aRLPB3g^26z*eWiJ zpV5)gQ7iNSnfJ_>a9Hf`heBPXW|v#eX}DR}>D35yB*RgoWa9lo!$SDYje#gW?1T_j z@pc2g@_i*@ksBAaFmSFLm?6st;j{>2@u9vo4F}PeWH74G^F7~v zgSNQCT-&M8DKI?wQ<+f=iQ9@h+)6a95jxECy_^#CF^VNm##(ipM-2dpsmgR$<^kDV zZw#kXA4xOBx6+<*3=R>~MHfy5;KF)MK4W)IhaDh0PRLpsDU(cslE8LsPHK4~!mzd z&t}1~jJ4yqv=t&p9+pen&ef9_uzTJfFm=Be08LI@%(^p-;(qZ6!+=rop&e8<0i@8x zp#_d_V#Krzp;vg`&BZGkzF2ss>9KZKyVPIv+W(Y8`d@K;<)!?dlO&BvJCQA>Wa-+Y z`a!Ew%a53aBek5}cMF6C{_Mbj3;s}*Ze}slYV6-ei_n%n24coxb$wp*rIJsU)dT&a^9NE4C*T|bv_#xKd{p8Qjg(szVOvWi$UQZn_$2SX4kY8=7f16 zb^W*6xTrH>XpS?zAKkao(nmw|S9LlfQw%yc0-inr-rgM63%?ldZO-J@Y$(atddiqo zMR%GNKlJgjVC>Fdz$^Sk6%PO8lNuiC{&SEz;_%lh^RL&cquB8hLzOvKMhN*~81R?+ zv2>9mi&JqGI(2&=SY*1jt`E^JcC@*2w`zKZemG(OsEB~${?oxh{T^9m3)z*djwua{ zM+v;EF|DqLY_uivj4=J}UPzD{*pGmNp{UdkY-sT%((V|Y32tf4t>VDw>~Ch(t8$0MDpe-c zs-c9Oq!WNP$1Z}zkIQzezD=dF&OC`-JW)q*Lzo#I#D=K0{Mbw!q8n_|n9Q9X{xJ)z zgAEe)Gh3E!0} zl~nf*K$DvtY1p_089^SzW>(=)O_T!;BCepdNfZjN5Yl z(9j}@(UwB7_&U<~^jIfj(WWQE7;gHYfaCHVLr2|rG}nyRVbW({doup^FdbY}h-`I; zh~)@zb*i<2O_%v6Oiy!lOcd$Ft^AMiMzP3qz_X~KQ>cuxk;l+ycWvJnRpLyeu`lX} zCfUDtXbz_5c$YQA&b~JCi@{9;KKmj&g3eX&aE$@lWDpPWpXU+RvN*xKHO9vbs&8AA|>|njUOoxLlB|~Sq@wk-DjvW9!Q;4 zo-@nxnN+xJZ;)HVEmq=WOYyQWzr~BA-H&`w8PT$OT$F1BI_c*enRLou!=u0I126cD z$k%8D@iFc&O(y0Id1AQdU`BT>HXTqIZ1*s&wUBhQ{D{KD>JK#m;5*I@>&?0Yb+kuL zY^_jGr6P)mhuM_K$`#+b@)%7V9yVNXV_< zPKLo*PE(5Z*d5>0^Ov>do@epA`QsBL@Q(yaDCWbMa`#1RoJA3L<28feTP-7}t@sd4 zq}W4pGPJ0$8D`p^d+BTVKB#j+`+;UEoMvCwB(kggs_g(4c&Ft}efpiIu_v{m?6egA zrbMI1gb&w?QcF5k)u3lfLUSdi_DwG29r_(I(FKvgfHmg)w4#E_Y*Q3(`ec$;QP@OU z+C42|uF|CJ`4PF0r3&?PYVZdQCK!>G$ROm~-O7J?JwKq_gzx5oeMHY9DIz0H5hU*Q zvy}{&-|v^a8P$JVS-<%JZBzlj;!~<1{%--_%sH}o_YDHPo!xc>ztR)6I(cbs~y zZ0^5_R6XHpJp|FOJREQ@qeo8BN8A|TrTywBS}PAn^h;NXd%o-*X*fw%1NBp~Y>az& zuJ#v3n4!uD`onUI1QWurZ!%LkovMA(j-qlI5dwIi8M_*Lh#txLI1BFM-shq7@zAKa2iW3xWcx3$zk?)uw96H-_}0)*nPd|6k$w&efL zH?;(|Lk&lT(f;GR+!Xgd)ZI_ouX>$?kK+bm;thk>w=+quKsj z+L1~7SU(j$SpF3jzilqmM->Xyc0!?tEidatiVY?SIq4T-L|b zVdOyT-V(fp8l;>@dg5(f8Pwof^~@1 zcP(Y(IkiV$AZxGf4eJMfX$IyC(V`)w^TuwkSH4ziiaHqz$Ph@?6+V_%8cWt15|@1` zy*=TN%M5lmM+C*!BTk}BpJS0|>5b-GAoloz+?Mt>*ueR;4 zCL6T#%iPT@5S0KxZkgOqbgOM3bCcF*UD@xstEDQnB;_#DYjobd7IU+Fi$1u|$B}*m zew_Z$WJ!|aPt1_WP1RuEG{L`JUU>=kr5c#+gk9XXFUB(@$+Y#4x|1O<=peGwl%C)8 z5KbJ9Jau>cxtYcq1!hw)ESr&MpBtTMv)(KMt&N2r-ldcYaF2h@aqZQ}lN&n>62$^r zSk~i%8TosOvZaWpbu=()m$wN()9LnevXPWn;BS%yu+whK>gq^%p8)^#e_&SKQ^|lH z)?75J1Jn>aRpm#7i-b|C1dKylC@W{g9swjUaCM00BH3&aT6BdGo1I4${8OW;n$to2 z=@Bk@jdoh&T6wJIqbQm0DvX`_t(T++evTRco;3NRy*5rOT9(3(fg2;qxwd}?28q|DDGoxP*eK^g1QprVsRqb zHd_0fC$?6uYHW&YDb)9a4?Z1fb)9Tc3|E%#of%*HDRuE9xIZnJ3r^lL`>mE za45hOkt%lVvWiYvZK?=(*T`o$_Ww0X%Vp9K^+DDyr$M!4LQl<;d8BbDnzc&c@m$Di z+ff+i0#bGv^Oie93q*7lK-|H;E^f zn}v1|_mTJL3$BJG?jh}B0Wm0oDkYZtc(x%ww(H{r34aAF8Sa8l)K``BRA*=~sPp-Z z>-S6&CJszP0zzi56UE*7+!Dqvef+;8I4s7D4dxP2&z^q)Y`Wbe^D z?Cwc%vQ(_*@=_~upfq^_%KJ{i=5>&3sf4v}R~3+{-)W>O&t=#?C+vRwS*O%u^&LJ8 zRFQC$E}&az@P{0{K+5Lpy26mP{CXFMDAcY7qoH$-$NDlWxF9>?=ulBcCJ70Ub@jml zIgRRWCaK60`OWYUP_fF@M{z6oxi+=vgD~gNKm1cp5mIcRh~5^Pa7bE7t@$j^h7l3> zp!uqBW5w8gh3m$@=4-;`Fjrxz>2!AB&0>oLcDJFCD>LXu@&NFPFVJV?nR=*tIyI)- z2Bg$S3=*cqNCtSQu18GNvC`?C$U3y&^B$0%yACi?Me12lwm=6W@@(oa45)D5l_FqN zlV@xM1tpUsE*r*M7^lloP8z5*sM?KKk)RQCbE>#wwPB1?6J&pkSG3lDNH#;b>aQ>j zq>fSQK1$m+LxQ!w_*aZXfKAu)?Pv)a&{=36B+uSZU@2Yx-A!P}le>{25boN{f5+!0 zqKymA!=v4!LO3Z-6P$($@@TrmJI|VQPZ-5CESumM_tS1HTZ^&s_G-#N4^qmzhen3| zfHt~eIb^Bv|JG=Pgw4qFXJmcn%h|jc+KD2X>juLXqK}+bNubHCb``+&8V6iVn0AAW z@=JP(j@EDdkwZA>W#^`!iK_)d8_}H5A+!2AKaeTDA;}4CcdI;;K8x6V6Q9<7*7lG( zFn?z(a&-3AOX6R6mM(UbwCfu-tDj<4Nj+|~7PV-e5p1$Faq5KgSuqhTXj8vhhyZlc zm;Opam-0o4bi&`-zq(BeRhNN$_+B%VU4D%Q{cwnkd)0uzbdLz-Icxxy;_eN|-{Cb- z;4<*c*8jpaW||y8tO42t!Mtgvdx(#|#H05%(QopV?GvN6_}PN4lfB;93)p_p!D!&$ z7NmX&;$Wp{G&`Y_^z%~JO;5QpKwxVf+EwQI;GB*c5T4Y;bchjFZ30AWy7!9R@g;nv zSvG$&_5=gO)Pj*UZpK3fIw7S`pQj&4y%_L`o>x^5;nh@*bJ!$Bxeu%a*RU-Ma)HBX@?b(?Al~zRm#c^tn({h!^|UqH!- z>#wE6{VbHgF$^bbcOvdtb4`>eAqYFu_P z<5leKb=ugfC&Tp!K>f*3h9rw~W?KNn4=WiQus@*SHsc`^86aoHMM}5L^38YnV-y}3 zOl(qyi|`yyaizB-wMUJ;PB~R94j49+b2H<3NVq}PAxYatw-u&SDied#4BtpVCKzA( z{yA2jjZ$?@BNUFv_1M{6S3NOHQlD&uCckC+gemUNQ%0He?rAK@P9);>1CBuTLs6N< z>gE5M|AB{jyP!hNyM@;Z(LT)iQzu2D&D@_$A^~^<$je`N3*T=7a(}+#88xozO7y zJgR5bz6jN?wgbspFQb#$uIM55J@-HeE7xJ(U86oEya9q()O|4XDCkd}ct3ujpmt#$ z?_nK(A+L5J&+Va5=SvQh?Ub!roGRYPJ-E4p*`iU|R(0QSe!3YO*{FB702NdRwv*A2N`O`@JUAJa63;c#a(0R?G*BKsdf|Fn}Dk z0$Dd-wfW3p!JtPDHD2^)@9`0r5=391p~V9TbZh*M7#5x9b_Ccmooa4$4qMe`1jXVB zm7VyDwsC33aw|AZ@QlOs@L>TX`Q1o>|414z)4ea}Qn+3}0*o)?%9#kBUNZEXRn8cB zD==LyYoA@sW~N!pmS`-Qe`YJ zavrR5orv4Q!xhvOz1`v>eYTk%7KB4$i_Iroxo~$8!Ya5Pe;u`6xu>oW{&^#9t)to! z!<|i(#KB#gr+c&hFvQqOT4TD^%jaNNyZM4g98bJx!X|y%dQ!qR+*z`@XwE%|^Fw?T z(R+V%&EjW3uhp&-p;>B(qjQ6fJ;QBAp&S^oC-yG2>gV~hHFgxDd^JnCK`$2`-|Uq5V+)UB7meEZhXcX-cY-VNs6=re4kFsll#(md`0Uz9 z_%fm_fKpy?vgYWMTmKIc3uCr`;1_XkhbVw{3#4w@2%}U|vsJi@lv`0cqq-{T)k3Ah zFuOz+Wa*cJ{H-qm_WLz80S0@+`00@!O?@H*^4E%U*d!05`OTp=Ugc&5CzE|x6{}H7 ze8yRHd{cK9Znn&m^(q(SSl~cv(80!=D(Lk6s0H0$A(e{#CB*qVPwDgDanD`0w5G<1 z-jf(<7laHk+x0&q$2d%g|AO@VzJ86Ue5Jq70a<1WXmRF}Y9N&BUXq-ZRkn8*@hMg` zO2jc$36SsNjK56a2&#$RtW4y_jqGG3-QvOS&Bg;`V}T3dl-M=MEGE&z5g@e$qAET@ zcBsGdAU?pVklN>6x~y|<^rqpkr>IEDZp3}5Ity>hxB%WPrNm_@VhU&JN%>e}CqS{6 z5SufOT|A54I#arS=sHmg21Yj3D{2=2BKXAUJ#W8-ZHu+r=~TK}SGuZHp5ndTOD~Th zWgQK}KsC55^bNFys9E1=&7vpG7^NP(!<~nz_$W=^{*_qnE#iTY_RuX48zal-=f*$j zxdngALr4_dVV0w}V^Xc?9{QZ}>Rt~6rSBU#sJ2CX464(TRZW?9)nn>2s9o?BADiL9 zpNm978ER&Vh5?LK%;Q84=5QA7m^D>|HqR^?9`G>i$HBWZ%bxwqu}m1|z!tgO$<)Ce zF_6QU?6s+i|0Mv*;D8E1<|O3aN*F7Vm;w}NRP`8|++?7f34&t{@eq4%n5_Q9(jKt0 zJ>k5e<}>5;E`>qAsryGA``;O=|0?6c^nsgvR9@N1K`GpS;yNRgAHAzQOY{dcHC}Kn z%JUg-3s--mLVYXHV9iT;mO~^B#`y_$3ZD8j`egrX-5gChI)h8j9*Ple7$iTD)ALgS z{H*HsiY=ygZbxxrqm$AC5t43}S+V;hCM21~d#fUEG_>0p|0@Bbhz*ZIXv}SZD`26@ zqZ%6K`P2Q0v6QWw9G15^8%S%z$Qd6lNsWL<&OrE>brOT>v zk}YMai0x+G%fTapHZfS)Yl1eDbYvaT;JF7&$G@hbAJb2RD+9*<9ueg|pCMb&_}#jX zDfi^{$>fD=E*XS7qPBX+&>&N7*&*?z0m(*Vq}-}Yeb`=fETbP^Lg|bW#nX(|JyOmx z`zrwN+EoS%g~UOSxaApwtiK2iM;AO_Y9v$ZJL9@FcCHwi z>X*?d&yY1|DPMDiRajNzU_QLJL^`Xm~$ge;`-0)_gUYiUWHb{64&;T;|>!>t^Vhe!rw~ zM(WHD0Y4RE-K41-%6{)0gI9;2P+hxNLt4Y~JREu~z2=i1swID;n3J-y_nPeoMf#T8 zEGkkk%`EktR)PLjeZ-Y=Pfc48b)>eI?yfoHT$c|Ta9z?&&%>NiL7@gA{#_!qf#x7^@p36MRg~$f?cQUTlR{4&7n~Av#cuA6g$HalMYfrV zK&_CZ%gHsEcUBswn7;`QB7PMu3W+c9wvDIWH(PLtOOgV`s zR$&|SGz#mTBirZJ zF1^P^&vueUWv0+g#PdpSEJ1#e0Y7Xlyw8v6>V}oSVzSC9m&8YYZ)Hi*nZjk&bZcV_ z8lh%2)?AS5A|KR?KySs^9^6=WF8UBmNp!b%%u&^*Dwnyq9$zI>3;-&Cs}=*Ny^sfMNS9I2YZUYw`2)py3CbTV;SUz``-}2>kn(y;@_UW> zJ*NEbQht|3*kKWMTEv|eNw-DXZ-I|^W-*UVwGB_ZoEiWa5>%YOBzOQ?;FhCza7#1lrI~fotQwFcyGoK>36kbiOS7w` zS=CbXp*8Z%T1B=C#vvVl2$xFp7}&uIb{)3wYt_7Z6#~l&X^umbX_aO>q&el%>~cwV zg(Ry&nhC0uWmd{FtH{h6MRuJ!*QI0m4BVie6Af_C(1}~4U>T1M#+o?HiMLensbeKV z-+D5)n#?Vi=Q^a>HgSecnprN(f(v#@GhO2OHR6maX?BG)t4fwxO@Zmp3}CQq)N-11 z$kiF4y&@Ve-VFf;032e3Rm`9oJ@7!|OXpWe7gWg>RLd6BK+D5$rAM+HhI9^Cy7fTg z7%biJCdduN!Et>|IxH}tVR*D`^!^yY;+|d+ z;5HA$!#bkT&UhmueXzs|$8d;_;lx8F2Zl;L8W&0x)~j`EDf_rcw>Qqe?XIGVA3TUU`O3hUArIxFl%SLwEZ@X^aq9 z89WJc&m>rK=SN>DTi}vr)JkE5XTg-IQ!(AhaSg4+4CxqQU2ag7<07*vr5P4!mPN*} z${7wBOu(E4%Au62zQX7qF_hWpGMMJRS zX~2S7ZUl!Fgkah#7=9AQ6~m*1&f+x|i`wmEPnBl4RzFr>u&l0NS&e>4rDn8JJ65S( zQlTBK(v8&@uRz?0!e5b>5_qz%XjN@tyw*rmR{~hh;Mk140H|_3+(>=N%G#o(4ppy7 z+GfZPqVNaguABqQt4DKSIR}=PXMmm8AiPSH23T?u!4d@*8Mt9w*|Oa%>Y%F>Rw#xm zm1C94FA^-viHzBH00<=%7$|Kq%ZN6mA!a9uP|I7fbJ#O7ABm4^ZNblyEDNw^PR6 zEEU`%CYI(G`2j3h2rTKZ;p9?#IIu8wI_ru7OLVSA4L`Bf4pMU>N>-3!dWoERu$x8m zouc`6^m9SEaDJI!UYX!JP&tSXKj&2l=2Z&kRg34>$}(L zuQAaYSUA-XkHZv9>gV@UoBivDOgY;SWpfUW|Rpt%Y<2WL8euZVdXEd z=3i$Q%yWw8gJtZZ>p*G|*Tuoo9hWB0qs<4oC>GGEoj>24cbzGJUa2tCF3qiwW;?~1 zHqipBV4g+rRjcSahirZYl~t?C^`Ntn+z^c@$Qwz2L8JgnFf_wDXu!M%4L1xhLowY1 zqe`4<7cMXf78DCIN`x6E5qt{V#rz8XbrpGEal*xeaZlt{DVVi5Lr)Or?`hC-8u2m9 z5T+LZKYujvlHH(YHmjInAWQ|r1GcpY+Wa~P|EmuESL`6cbN|>iCMV9rPX^10lsu?0RqO^OD@-v1@?4)h$0g0G1)fJ;Fwen&XV~E~ zh@2_~qaKkYYV&wXo{419aj;aO5NIDdwVQ{8!Lm-CTO-b@5N2A1Sr%!IU6f(Zzs|pPZN!6y#TO;7DMr$T4sYH$0y6I z6VI;{&4V6viZdKA4uu(|!VI%8!vZ5;n(3r+sxbig5}dKoV}x*Ds=PXiQzd7X!ySpU zU`RWJ^UH;JNfgej!Gb1*-mIYqK*~9uI70BB&~v;73&u&+B%v__Z+jgQdJP^+0^D)1 z)QB@3^4toTI4G$V3i?F>-s&6xOE-X}2yQL2M37a)&nV1aP$bASi(nXM!M&G33kbey z$j}; zTdwz&Uhg%p2fPHfyh_0muHS1$U|D4twUQl$0_3h#vE1r8u)MmI>L?L?;MfnO6bDQC zyjCm~YP>YU*v!?muVJvnL5VnDg}lcsUIZ4No)eB&p|}iLVXu%#*DtpcPgJI;*Q`ey zwWMDkri>0W_&k3h6TAlNPvZ52zlNM+k(vYj&NUWxD#ao$d`=zbBoJij2ob?P}@ ziXBiyPeY+|IBHH5ERo|VmfAs&bt%Ad<{313meDyISYbV`>8mu+p2PH#T!?nhtdZaDqx{%LVY`9XpaU>N+XP-( ziH;haXCFE4urJP~%MTPw!=;J_iz-s83YnEbqapw*p@Jo-0V7xqCaN(#HJB-Qaf6X+ zG*V3_T8bv4q7kbBNf|MzA|`dvr1lwAe)MtBHDr^SXf;Y(aiWN@ibcn&VX$QR6s!O+ zo{AGx!2Hb*nuun*y1l}%$f|}n51Zl2)eTl{lT{P8XaZJs$fANff*}zy@WFPhmt|Bd za^0~2SCm~w%ZX-|rUNFU0dhE92d)$nMxVv>%5&9+qnQAdp%~n;5L)&ImHXCITLw*3qUIuXKkqEB35v1K>vAm<`c_kwP7A^d@MABd; z8!gHPP${$w5h{@fO;pIDjMy~LDPbew*YfLdG+>B z9`0*oG~=ejhsU^X6{pT1a+eU^QkBo5_LZtV(8VT2<77?Ko3R(b1L)HT2*yJ(5e5~> zLva;Ky#->IURbB%RmyUJx=VraBnxarW*M1TrO2w+f8ttGope<1EU|tEjM5gg-hg(xc%X0*sSoG6&_Hj(rZx#Ezna`s89q* z>7i5p;Nz@xIw%CXYG(Ai00V{>XKL}I@CR-{&4WhssJJd|zS|)7l#pJFI^fWUZJMx& zf_@1a$)K4EmMTJKGF&VP>+^6RC4Ib>8KB1xPD>lnMe{IS7+6L#Eom4bbuPS5qk-3q zwwxr*W_fcd)d<5I?zB|xH>&%#i>;1 z*BHbuBjq!rKM$K>$Wbu+8esxr(Nj1&DvW3%Pge4)ljvfp=xQQdP$^aNki?DhPq`9b<3OFt6IEk zTk3CUuDPkP;%g!M4Ya$`T{4aeU7FX%PFJpU8CNIfW&HxcGCk2?iB5-_LF2VW%gVI_ zX4yg*-q3nVmP?IdzoTa?CzThvLNo`KQ6=UUp9Gfl_gn$5!6;Z{mGq?mOKKz`f$Fsk zmXm%p87zr@o2;7#OC56dB12&gEWb3G6)b&vu1C-Fz)xUHdfSpt-eBN{3iBFD1g)i# z#W=CbKshz7uQI7->?Js3=^zKKRHseRX`{Mq=s+Ei!?2xLVwW$s$yZwCt1R*rrNmM* zF=ix}mQbsV)G{+QTt@b|i1ub#q*vluCazj1w%sf){x7lqL6PcV0l9}S-Om^85r}sQ zWjjRVE-|%FOdS-;4hcnjgwh9v)bhLnKgX`+xCxG*;`)_XD9r{3BW2WS5QyjTi$mtc z?Zor(s7FB;fhD^^!)%~(kh@iv7jbGkgJq)&eXDw#)(*6-?Q0wFYF-2CY+8-A25W71 z%k{l&8~PXCIMi{=X!otl`tDfX|IOw7w=L_tbxH3x#(KU!+D!`{Bf*nMJ-00Bxp}Pn z>to%wk9FTR)^+>R?%S95d~&hY4DAnE*WJ7xsbxJp##)QivaY*zT~FKU-u9L7v!`WkZ}Sb^ksBBLzZP_^ zEYtSs`Hdt#r$^W4P_lvwMuUol99FU{x1JxVF6wW0ty{A2j^Xxi47S}g(0*fo`-a}O z^?j}5{cWoT+Sd)WZy0R7aglG0&prg$CeNvo=hTAfsbGMW8PL!fR`D(*21_5EPf~+R zhA0_96cNX86O4K}vldKYk7IbDe|(_r#=%85_AgwITBd2dt7(02(+&O2Hx0JlGSqg< zQ0pyi^{eWQJtb1$AGdo>|8z1D#?&&vLm>j&F6 z3@zNy*RrmsX>DK2+JW}@I{`P2K3J8e40zkuGMmC zv?!?$+BiTP3Wz9>fRPMBZ&mTaNX<}Z!}7kimHq9@dst>QH(f zbu_MC+^`BMg0v{S64d5j(&!orRQA+a+U>evp|n=Xbr88WS%y`f;iNLFRoO0Gj^DtH z6mpvi^P2RWNPVab6->4iq6RT-sTPc zEzs|)`&w7@wXNuHUp)w8xM_T$Z$+K4%P5U#d4Bp}9-R;fgQXipe-WsowIvXMsn{VE zj;mL3kyqTNX>!}U+Pq_ZEvrX5p)cT5*7mlH_co8i1L&ac@OVSzl1f9DS=OfIhN)aX znGHAx9}&ihm%`eKG^Ft_rZnvY`e-FOg{#W-Q(4fh5u;>bb>UE?Vr7T_dNlB0wziG; zwXf`7xT=5AnxRGO`kL3m0_d|1*p#h?`~W%zoP!3T7FGkCB8z0y5Uh$~xwp#L-s~Rf zY=pmE-`BRTw`FZl)4G`8@i>~o(NU2?$s-3A)%6Klho4Cj8az$o-SD=cmi0ZYNHAM_ z+t$It(&As@vUl3F4F-`{$wslws@zB+Z!s)=A?Nb$$cCZz8-}|!bhoZt)VQpxWpz*M z+Md>ReXZB`x7^Sf8EPgl}$?cBFlEmGQ4U=gMrhcXE)*WV*!-u4Zix>(Rwgw zf}q@8f!GF92-nC7!@wUi(0hY0G-wdgQbW59+?BnD_S#yB`iaQyv8}OoCC`_O|Nvo z(xvCQlfjbqTl)2!U}0XPQP^sgEw&TAsBA+ju$+`C_ELbQog6YNdPt4}@p{ih#$A2Cy_sd#%!L z0LwCJsEinL$cAm=VY8sWB)`v7G~OS&`|b^g_B`jo)VZcgsn0V^T#hvc zmi#vSwGx;HEWz;dDs$Xqri;vSE0})2ed(&cZ{L6CBm1^L_t^dy5AJS1ekCTcOQ81c;Er~3@XkJaR zsHwSX%`MBe?0@LhLl6Jp$vyuKt#@$u3;T8*-oN9?0}ns>=&olE?Rn|Y?(c8?&XeC* zv$55^s!$pvS+$~!N@+$7neD=PM^WYs!xEO8}943kElct8eu! zYc_4a@98J^zIOP)Yw%h7cRam+$1?|ZJom^Bxbjz?*!6?Qwts*B#usi~wP~?uon6(Y zWYyy|LY_ES#?Eab_Xs>mW_gH=I&kK+4h5`J- z<9lCxV&99~?tA3+_1{|@T;Vh{tMlpskENL|B{QhwqMSgez6FN{%W42ix|$B$lp@#Kc+Wx?y13RC7Z12+tcOQ=SQG)jGcxtL}4?c~w18M)mhe7+c zKecz;lUPrH_H2C|v~%O3t@j_i?^`?X{Mz?!T6Ndbt{d9D!!;$%MdErDvqGNfl+CLk z=hvz-Jvt^zwh3UVV^0Rlc)(HY8yubl{zSf6CDTvjxTRUO1)^ZJv3s=R_W!zR$IgeI zJ-FkgLwjC+boX^}VHo@Wm2d;W=iFYVs=)V;Uu9%{Y0x~R**4?#P~7t|@TJ-R4Z zda&aK1rNu-GN6L>1jj&<43rP7K;(;5kE|a2=Dl}3ym#vpPwa=e|2%vOt;gWw9)4!` zgHL{Q-KM_A8|#gOhWth%%PY%pD;dFy1eSExTpyKPFS@Q0#*b6e(;fQy*H>=ae9z$n z+h0Dk>%~JbclJJYXx}rB?|G*lo`Z+x4nOL z|6LpJI`q;LZ@hH)XD>YUqi3J`@28*q{!@ouI{f%6Pe1wJFFyOTm!JF9qdR`_z-`}O z)BEtk`ft`0tSnbADOZiw7T|O~B`aJdD==6B-L1WPz!E*EDO~PU51M3)4EYVXPLf-N z-IZE)V&SeU&f=W|%Oq(N>Nv-r0fE(9l-FbuF1AX)v|yRy?xupJRn~11p(2*}*ojw# z^9s&^<(EUVfF<6fbm=&5T3WU{4wiIoKm#{il;3C)wOJ&cHrZeTJx&h5PSB+Q%Mmj* zP^##+D*J89KDz?RK@DJFK&f9G^x-pk{%U!rSKho( z>KheT-yn3{Dm2|GD!NN(xJRJ7U!d76RP7Qf4)BS`_|n~c;(md08L!aCw&|GlB-=}I zeF~gmABDn3gJ7dPnN+zaT4wNKc49j7DEg~}R3E?wz(vBZR;oE(hj!tz&fB+s=kXsr z_w(QX>coj7@0>jP&aoq>Ku6z7(y=3NA3O5Sv7_%CKlbj)XD_VFWcpE&x?spIdzbNqvMj{W(kufDl&%d2aL z0g5(Q$bk}3mr2-Rm-m({hRUfSr+m;V9xxESdE$h~FZ#=m9r$2x7)bZc^@zh%% zoI3WW6Gz@Z{?_}aj>5bB>AmBB{`KoeUwrH*x3Ar_$TMDD&~KJ?ln6UZrNd5Ym4jMl zC&%pMkd5fK$a}DQ<6w!3Sc*D|@>_6=`RPIqlfV*0gC&ts4-Kg1gcf>lxa;PyD_uhV}D{`}0(JIQQkY-hrxh{M_ zG@@cPD{@2fOpj=OWsxuxDPMB?n$6EY^7^lTeC*Vle>!>O{S)Xtj~{#M#IZNwbKg1f z)_W)3eE(NJJ^I4qKfB|Gtz^Gvb>xG$k9~0R=zGvC@F~aMJazodci~e`{{D}@ z`N`2AJoU40f9>JLo^h+9iOj7gvg@c^4~mAxM>^>USajGDgC&t!Ph?aZW#N|kW#74V z$FqlC`~9!r-QGKO?ET|M-aY=-yC;soNPF+p(f8hX?YD<^zp{4ZPLI7uEARsD3g^|3 zIX*3_>Jh>fLETzzot9gp=eYGa#6XqngU&^%s(@XEp;}YVhNbr%*#6Qle)8tg-@~{? z!rdAZ>ZVi2QYqGhZ%1GACasgl{xG4Ve>ed;^1Bm%_|5U({QRw-|M<5*dijmRkG#D7 z{sUiMbI)MQxZlxbp@0mliOfoJK^2gaGS`cO?K!9*1j^4DKi7@7w4!xH*%MVsH7NV5 zN0wD1obM=-_yZLK-`ud}sROV5=8faW|L`83K4^5|iT^G%+An|d=5vqz@&@>yu^IDcP< ze)r3xFiKAydl#lW5_}2_w%@(|`!`M;+V%3yEADHoTu~@!l4ZEW^J|q1e;h1Pp$k?h zIT1j5Sz%GsuAiQ^L{@G7e>${0Z%uLEnt|``eBi~Oy!_@{zkVM^I9`;FDTlxMA5nkL`Zx^&kG4UhCkd zj^i~AI{E~f@+axVGd;Zx%jtxUynPf_-I(xtON)N-Nu;Bvj>8~4220I5zxtm)JoDJA zw{EzvJ+RbB24y*wtpC>nL$@fusjjGhMc17Nw!HZI4}Sa3i9f-MkGy%}$Xh3l!W@US z<;bZM@P==`^Q)h|`S`w9Ze90asA8x{9LoQXGWi0xDkqFfjD*o91qwmOCjuC>DTvO# zYS^J@C@drb6NtUg$xNT(dP228$;754`9|{~e$lqyWX*wPl2U>t zuDKT~&Tj@o!6xfZV6AKajAiU-&q?){VL8#`-ZEmKLO$joVCe^{95qv8W@@R4TxKGdo5?ZYje6O_MoB}j z*f%1nT_P)6EwyYA7vCn*eMhL;DkOLFWe4)5JNU%C0@YFkmKFoEhGM%Zu2;cD73bhv zRzsIoPXNn!dGTlk>PtBwXB?J6oHl?4OCOP0$Nx{Kn(HbzEZi{m?I-qp|HyCN`PV-_ zK6Co)IrQ)Bgg!(1?6Y&Ul74lT7XIJ4bFr6vhF%^QdLHZS+0W36&zwE`>DjZV;Q@Ms z)8~%A`N8vtetz?+?ag&JmXdu%f{qgYVw&O58=MT@orJOr``s^oX&YnJtn+4xE-3n>`JNwzW(=nY*Xu1TU=b^cw0Y5%>_S4VK zoc-*~xqtrU<0HTM>#j{N40qgGs%hpgu!}P*iJUrAdypMgvzrvTK_bf~Sx}+NbJr9t zTswHjquXD2>lY_J{>LZK8|TiQId|@pbLUWl!d;;DJbmuNe|+-p@xLE_hKk;$no*NT9H4`p~$OsIlI@4ee2M^7s0Om z@E;$ZLw$4x^*1~^`w7;WGoPIOLN zL12kImMUgY$q33bYUCN^7Dc$bVa=|MPyF)rH(}g<3ayUb5h*ri&;9Z3zyI|6zq|eV zjp6DMozO4Ntj_;Rl|0*{;f6KnJ%KRYxYA>-f$K4FP`tV-$0wiflFX|G&M}C>Zrjke zZru6mbN~C7_dh)S$vM=miQ|0IP@k-%kw1g*q<}eb_VmYRKKj2;K6v-9Z~gkjtIzy+ z*Y_T~dDXW&gDcAQ&3b;lEYm5?D3@kdgTac9KJrlRUyODWSvup5ror_{5DKz_@sYc4dAPA=nNivV zU@87;HGrj_8^&cweFmP_!1I8#s7#R`rF-EtDHvgSwoj5-qhQq)N_N9!@-M%A%a(Tcnj&G7WI>Jax+(<&*3S?I%TVkD z>4lUV(a_FYmXFA);r)LWZJygz+I!3Djn5o>{nT53`}kjIB*tdYC+E(bK6mEq-#_@* zZ{K)(`@M$;n{IKc7t1p0B=cQF27qOQDmP4I`Ni`qVG1TzMo>v77V^cH_G~KZ4!6$zCliz*xua8fEiv9#v%rj`-eSGfRN9WG|8&;2h z{qx^Pe*5;p9nUZ8{(6O>o&TS9>AV^WaGF8q@1emG9X!UhMuPOoRTVlAONT&vRcsf< ztdeE{Raz*vv(-KFUpH_1;S0Zf_xNAVe1ex|_(Zg}e1aAkd}p70boy@}eE7rXPds?X zt3$2#2OVFl)UBx2uBg+kbQLW36fgG~m-|dBye1$wRCnZx0!vq_0wg%A?KnKBEnMzY z4H%^hwRs^G8|7LDu+(roF|fpkDUj_n2bNd1=D>0eEHCqTn*+-@Ski0>bFC=9)hz6> zN(N#Hhc7EwI^|DRS;(bk zVuguVRYI;b5=(8wP^G-bE$;}D&0$5LoviJXJ61?bZW0^r5^3%iC^zvH_X*Uu3k-w2 z5;xmsV5bF^v1I*UI9NviM9uIcu>233l2zl-Hmw`I^U$7`-u%tU|NF;>XHH|&|J)~W zo%`%l&}W~WrUm!`Po6pZG13{(rwBx*8r%uS5;nHZe0KKqXJ?~-9yK+PDGgxx{&RU8CL5|yz;Zg|ko8+cJ;iy8^z7!KZT0oT8(%u~zwaFR=fD4X z=F?B%uTP&j2S(GU@V1{Jo%!J1zx?90-+kvB+ZX%RRO)+-VgSpYQt@a?u(T3=7%T_V z2TSNsSR?@~!QiG?o{r##2mb5e|NQv(fBxWar_X$hS_bJfrtJ#=%QK%vZzPVFXQHh) z@eF#wxpN<$JNM6X=l=EC*^j~I{O4c)edPD=@80_KNcYWVO*n6XS(I5O1b4+v0& zoR%SYOk`G**%c~QdC=K?!_qsSee~70kN)YS58<-Gxc=xYGB-aubLQWtPs4-LV2pn9 z;hEpOacuwgXGc44vTGZ~8P2@_u#3N1LjYScP(l{~O9RIb(zBsieDVwz|EuMa>`JSy zVPMgQE#G_WXFvMoKmYc(Pd@taEDV*i|2}i}!!zeTJbm`VPtX1v@x_OqesJpVFF*C; zTi1QJrGD5Tte0lm1z)uSSgK&|aKl+2p2R1QVK@~bphhH#Baw}xAfRcGLO zi#VYIc1Xhrk_)^572^4IT7Ib7+<*Iqhrb^MOMq5nA5SyRr|N8)LRWtFBW!|y3O`SO z`pG9Bee#dL{Oj!_fBNAIZ*2L_!DT&PciB2fwo{UYk~R}L)k>BN<*nuTV}(PLj-e)l zrB}(QlS1Epr9>~P4OaEuf9I~Bz4qIG{Pm+xKZU9LDTZ;HIzB~U`TpO3^*RE}hUyqt zUROh9xeIt<123TG`7l+wK{~D%WmMuc#KBUWQB5*y3?lbn+x6S;JNWCL{^6g0{^#jW zU{HPZ>FIydI(zn`(;t8Q;otuKgBM=EeZ&9H-g&?`S+4#6^ZCE89uT_sZqw{E>E3P9 zq%&!DIw=$=rF#M`Q-&a@EESL?4!{kF1CELt71?{0y(xvRq}eI|>%O0)l!A&L&k^6# zetyP~rb(Xrx$isI_qo=p5!sWX0`r3H(*uX4GEsvQWti2j`xn3xS2p5!sAx_i?f4+71m2-D=8shQ;Oc*s*51fI{+W?lA*RS}rB5w|tSxg$989YoxfF;{C zkLjc&*`+bPGV(HO7tUJy(>DjNUv9;hV@!C->p^%=GyP7meBe@ql`7FI-`jGr(A=T)T{^T`Hr~cj`_p0&x8Z0I>#csE%j~~9W zan1Krs@_xzW~N0({V zv_75)_jrD)KYAd_zD{Vr4wn6pQc9!>5LHZU_4-ti-XmiD#w7%n6Kwe)Ro)+i{b#ou zp){riPe>)#r@~uPD^NE}I-*J*h*_S(tOW6y6(9k#Ou!tM$`~&I&ZJkTpikAvqfF#d zni8qa@${y6#-s$sghWO|3bQ(cQ7Q$zq$x&Iv#O|qNfhoha?-5e#Ob7@i9x&~KS8=z zW|)VB;VGkg$$%~Uz!D{(V&O4VvO!+B(Ye>350(#|mcKARiOTy#n3;<1lnr1BmIRlb zH??Nrhi`v*`q;(pPL0V-fF(9!Ed7NZ@00C8gY^#a_+4}FK(CFNu!?%EfMmhXA<$HZ z{?Oce>FmufKiNBX@~Z{HX$iEF=z!8V|7sqkA&of!f<9<&vok5W+O1fU4!wi-i!rC41Au}Yqt*kbnK;P-xw{Mk{Vhb8(0$USCJ6Zz@ts& z(V9?6CmI4vE)C^a@)%WoMm2zC3av7kT=r0~yw_g=TUT&S;a7A=F~w0xa}$qIOkcU^ z{k^-6-D=vtO_}fCnXu>w784VqFP1p=gb066EqG9j0 z+`ZF#x9e_i4{&BzXZP8bEAMXDR$uW*(Hds~5jFK5qsp zB*D0{S4PeL{b#S`% z#%{eyZLk1X!VnpCT2t%Qu6;XCuUWFGSU!o%&Lul>N%mZ_Lu!ZzYC1y1!LmJxo)(Cj zLfjQ}7g?}<8rhx~Pm`78OnhtIhldZGP^-HQMxCkGV6f;wW^8%GFy6R)d)L>;=1p4# zU>P2y40aa!56_~yNO1{MIU9kcm{7QvEYd?60jJ(g#c-5U9HhYx5{`dvdR+N}r`Lb; z`H{9(4FQ(e=VLzTXoke%Oe6PP`#m7ZS2*U?)I4P_8`LVHJA)WZMXjBl{<%b zw|w~4H_tS$kf)VLQ{*K36y(%($zXY8v%zNdCR$?1@wt}UD);8%_*k43>@Ep$6Hy%n z{=?!UNFrr=*@{IQcmHs-{kB@Khm&rbr}&x(Otagq9mn>cT{`d0-1LT+;C!m1$Oe`< zkv^&jA9r|4NB5rT!eD7Z zXIy8pXhCpvMuS$}q1pN6p66z*C=fPA_$x{Fse!`;EO#loFlWsJzt=zxyA4#243?-v zDeAN0kxO&R_Ix6N9fcn6dKvFZW)#be*`QWxi`bLQ~E} zELiMRyf-D#eLP_ZbSFeS89#3BC+kn&lDBQPXge`kOtx1x60h0OcIVKZ!^;=FT9V%w zOOw)E)BT6=srF)qql7e!9~C5pHNI%hn(ue)yMCq3f?dV141x4amJXAp-DK%9ntP0T z!-dmVx4-}GjM^pXk)tF1?M-JpcuvFa-mhuOYvVVC@o0Q?6`H^15 zvHm5AL1kP@m4IHG$^f>k7clz!D*p&rK8gS=(}O3ZlN-{=wW-vqR9Xd}UY>&bj-Wz5 zsQ4$NnvdE`R0~)Y0@gSI6M?0GUM-;22`CK$N~3@>kw=}BOm9kHG{-V0N3kZyF(+|h z$a~^WVt9np6reKhOs=AOfNapOU5D^9ukeD`w}b( zX98G$VE=g&ZAes)s0VgDm91^v141=9l@IFvSL*}IJTSZ%PSSuOV9AMioWiNq3%9)W z#i^qgY+z}|Mh{{4py(;=nbZ@;kS!FGFnWx4ku%eXiHOiW9KyD>iEw!0KO`>NgWY7r z*Um9mT6!;^yZQCDea}vLwNN-Ufi^ZKpfuhOrb=TPV}gK+z>*tO9_KeU(t9KUmS28! z_zHlf27_g<-q;I7p~X<7x0v-euio7EXZ8UYi)689Pj7!&DJhz(i16XHfAgmvEMwh0C^_UgO3y3U@t{O-n2>ni~)RlfG|K~8*|#}dG@0KgJeZFN)79Yujd zcnsI{SgNulXYz~l-~92LBiF998_i}6=iLNbn#|oMv(^kBUu*7Y)qeNc{+H%%C=xZr z1n2quFOM`li|ww$Ul!6Z*cRNSOlL7^Si1i|1Z;0vc5>y+rWM;h+TCT8%$sI=jom+!bs$CBsQhbCgmXrJ?>g>9J+=XT0(CX9wGE zs!_BpOkFeK7u8#x_Ex{W0RaP=l1OmJf<5_WA~yFvS%@%co97D2gg&;~(Ay2SCS-+c zEHI_vU5qf5Eb0#3#g?{hTXxQwx=fi?!S=}@JMn`Z`3$!#wwE~6M@IBoB%%`uuw>(s zDyZ^`ha|*ZjKI<+>8V@oM7U3(O|SFGC6+2s-juzS8j#Z>AIsf z8}%qo;jY1gCKy_$M!mMXL;d}iyBEw{QIJ(1?gz9i2pTTH45R34U=xNnE^OfawjqB1 zmY5rgub|N!#U4*2vb;qIEGNJ6+14K~pSz{+G2-h2aJ)dd8e#=?+=in*``WTCr8!S0 zF^UMVL>^1G0=8Q|(^(ZbJdN(2u1u|*KYhiwJAS@&@v0RpvG5C8{f!n|#0Rn7ZQC8p z866hhOD!l~17?WHg#JVSGxrC}Uh7VYaM0WjEG_+licRge?i|_;V7Yc&eq$U%%Jj$x z8lJ{*RsaSE3`wOprA1Ta6-6^&f90cN2hQo#Mib0R^ir@GyA9?}1ArxRB%1EDb{^f+ z^7_l0D)OIB<&0!FXOV|z09#_PRG}`Ts17i?z6^MYz1AoU9@ZnnRU9ykPjcY1y|Z#t z>z`>{{m;!mTsm`ItI?yQGQu3zV6fDnp@vS4ms@}X^j{8^L`@MTj!Hu9 z^$6YXML~NI*avX|qmzQi^QcvSDp)rBMf$y9iR-2yuxv=BH>S}ifC#YUQ)@s1TCKna zmNEV#39#&|3fsq)gJAjVAM7vxJpcNE{1Ux{J%n@c9}@q(7lN*^-BF=M7dVDX884t$ zr7~(#8MOjNExwk~2bRA(6!y{708>2`sg95Ut#Lwi50h;z(+Hs#;e+UnDK>HGbzD^C zrHV(Z06^t4%2OHTY0QdrW6Hc)-P4fRy~q9?guq&mmic~5R_!8bttUO5yO@(uUGW&Hpw9l`hz zbG-7?BP(XqE!*<;mo~68Ta6kkSfVT3Msp{S23Ums_|Qz4P4|PP=>f1LJeGZ6iHOwP zXIi1_?f{mpUvJz0?38sQLgSY^uGG;hH^GK5f;)_YeGZ@^)({m{Q1y z1h7OS)@?NPn2ZJlmPT7LYJZrxYw7O+wvCd>`V?!z)qOwr9z-u@!X8@W351dF?$TU1 zbMw6oU(}a9mlRg$Z_h);dtAiW>6*hq4Iy!LO?L&$NkV=qi)x?Ebd@DBMvYZY->`by z(SzsUlUnZL*F@HK5AtjPECCt;CuvPr&foZE`_Io#dqpm&@*gfB4Nqq}iP^4Vj=Lnx zQxf8qO?Jrie~RxvOpqEiu5tXr_c!i1e&n1%PlQaX4WHD5Y4$?0JwJ{n$6&eT z(Ebx@wZ>pH^czp>SX;qz${IPpA>6+ZSdlbL$Z!#(d?#ev6=*LJ-dgC$NuML$+fFq(8IZdGs4>nz$HOOM9XqcLiG^g69h z+tZ`%f&bkny;f(0VKJJpN83W=f}-m<)`&_SR*$K-M{iQ=jT#(kZU$;T+j4RHCp(^Q zepbXQV0x$f+odo(5m<(Jim_8SkBy3{;80j^6&v|UBpmcBG0R;H6P4m93>=;wNm8lO z>t0#(_Rl*H-)OSHl3-QMCk+FRM(X&Ir27}Q< zjXh*!2NBIx$ng_bjheN7&DLXwTDm&b*64Z!mP8mQkfyP-L;W2B%T)zgjp2R@l6@LL z5sH5%T#o3xD{OUoe=k@nZOQ?#^nM}*Mne=oes1$CpKbo(^4XghEG;;{+idEE4~KRw z1eW_xuUq!PxSXj;j1eTej9@z<)e#k{Ww@v)j*5V%(i!fe+_bvqXRO+};ucbe03XG;{01HzS_Xj<^gSQ zZ9nw$k(G;HD=U~74`At;5oDLjaFen;R1|x0;4oN{saerwQ>$M3?1P`Loo(;wLZQ!q zqz1FT$E4MowJ>MlzNSZe=T_&=9eZDX_Kkwfx=^2N^6)fRj5r`x#dcTV9y16m!@V(B zdL#1yUxJYZ4a;PDNRnAalS-C+uP^JKAe<#DrRanq!6%~Al%*a_koST5EFY*>{+EH}pdNqq1qcvgy8*Z4Mf(*ckjC<;Wqf+200kM=z;Z)u zX~oOB6zU^ah5enY zI9s=O)xGrikzxC5o+^)wuGbcfW2qeo5WgLs&^R>lu|^Fk5egyCdR>pPM{RC7c76M%J#!|$T97#{o>~&)U(yGbsni-ixhk22z%tx(gfe;Z^y;;r zZ#jJNbVpCO8O$;q&qjcywdl~z>uq~}I=Xb;#$w5=RCYt0e?=UCC8;VE?~2w79LQ-| zi(8M>5@5+gJ7H;zUvY$IK7b|imY{Ss#jk)R;0@C?yF@;9)x!4<{B+{>%}%2cJ9yFO zQJZ?ZQA#1Q9D9wrUW3-6>DG63Xglv{yE=60E`z#D-`%0@YVYX;d#}BxyQ4=9$JD9q z?lfTOkvjBhEKR2Yr0(c1t-7;Y(*>ubN2f8|y4HDY|HU^}ep*>PFOgjopvD8d0eT;+6o3Dr(avCn3CNYbLl%xHXZ>-%3`x^T6-TaCg(VF zOO~Ea?YZNZH*NT$sd7^-E%@+b3&bSXn>&hf;gIDOwPphuK-R#vA%wIX#Yty%CR)!OjJTv z3cr4Z0L!&@TJ51&mG=>=E%X8V~3HBA8I*{Zckfv zxaHK*vn|IjoI7>-^0^zWSMPMRX|!EN6e&y;p)$iH(i_cMBQnZ+09;{45miq*?sT3x zeSYI>@7Ir?#tkc^x@FPaGZ^k!3^ySQ&<)^h-&oml(*Cs|mdXSX!)?gn9|Ed~xpjg3QKPG6Kus;h9Y5eqiY% zCxpP#8^BT$4okyT!9*=Xvgxj(P(Mjk@$B_$x5Dvucd21BK@p*MjYx>NEJnQvgXNwD zGglX6O^EPU2HU3x4NnJ)JQOwi$;DQO6)bI~>2n|D`{)6%l=wW!=lIC86Uyc_ul#)T z4_7c)_FAmskIBHuKar2 zPZv*LHR%ACkULhd?bY>I^gR}x#;8;4bQ-;0W6*1iSSHxzbXvV$uQehMo*sL)3Fjo@ zTBFedU`a@)HT0L()@{W3@P0s&3||b-A&5&LVZC=b|SC;n#Wv(iM1dkE zy~Uuj==8lX(_ju8^jgE|qZdAY=j#cj^95m}LOfu95YipR_-j2E_mx4BoM2{$dnxfZ zT^`d#0r(nhpA}0kD9D_&Y~Ba^zde8Ba)%yaC8}YDu8f#q?W3I#4o}^#YdLi7v-kHt z*Zf9N=G3f+2H1hqIg>@|qT<|303SR%G;lEh4X9KceF+G*bRh!|5P z+>s%71xL1CR|H#B(f-S31#|S3s?!(7; ziS>5^OCHgu1P9ZCP<6)cl!<;k?NL`rEQr6h?wCV^BO7ic9+P^3>@q>q&|`x=+C z0ruQw4}hhD-H!~d^0?>xe4zc${laYqh@=;siq;2~@(_H{6bwz&S-~eK9HmI*MEL^z z7exDx4D&3aJLSic#!3?>%xzlx$@|~p;yqfz<}ulR@LgSxrmOAd?F%h8P9M2(eD96p zdv2WAcm33%E2j=#K6&8M$pdhE1?wv4)WPeg58c4Jj&%)m>d;kq{%N>9eD&nvE2oZL zX*quF%!wOkj^FzJi{l$sec4?8ii$rio>CSYFh0S*k{etNn^h`I7)muaxPkynMN;#$ zsx_Z)KJ+JoC67@9=ah?f!g0~Qqy7+BzIz{7qBJ=*sP`@^UjY_ecf0<^)vlJ4*ADGF zv;XJQ2X>!1df+1H$i54Q_MAJo`|P3JXAbW^dt}eqBYV#s*$0nbJiPY;(w+-P_FOo+ z=fbhQ7ePn&5W0kQ_UOKoCk~!DedNNKV^#7$ut?Pai>c%48sSCC-)y zOC7g8M0K`M;Zr5sMM-y%1`iho4o~IyXXjZR+wDA~@4eQ{b;vz2h6 z;Hc-WHqC*bPOp7w%NP~vHc7Ehr=n6oB8E#g%}GeIPmc&vW+zoFnD*M2pB%V(r5h#I z0V*Lz?KWA6>Kz(XkeH>?Z+var+U1+qEZ_9%E1O=BiC_3-{l8^`m!R|8&!a&pzGs?YE!p+xNpMSRFSncWAnFMjeWx1rywW z*b-P1)q^3@n_(!82BSu;`{C<7FD-Z#;4myeNp%I7PotqsS`3yb{1vC9!o2m7hk8pN z4wmWluPl0d_Ya5vkAY=BsqodeKLVDoE&rf2ZyGmbB-tU$29`<$mX30gT_(#jTgI)J zUbA@9o1g9Z?&#%~*2`yaT{_ct{#4uf6Rqcu-#mNl>Y1aL;P%|{YiEyvuAV)9_1vke z7tdX5YrU;ecbiPOVi~%8gGL2=z=17II-Opv*515v``qa(r;c5Q9rDbvo9Ey)Puw_v z;@Y_rSI(Ze+H(Br>0?(~j$J!<9CaAFe&N>feP=$~^499p%rom>*?eqY3oJd@)NyrYlfJh{->ZSm6UXIRZe43X@WZJW z=e{{IyD5&6PjeOp153NgqkIcs8M0991JNe~z%oC=yMX2>4Ym_9+{B{T@+p-se*D%C zH_oYhx(wKbYcQI7bjD7-smo+m!>ZT!7+NoP{P@MumCt=pH}bjc*h)c26`xrzikL2m zo+F8#Cykzi!E%N)ezGKPf&_IOnJkT+CXJneZvQ&4B&c!#Sl<7)Q-qNd1R*u?+iq1WVjGT}iNIQt-GGTE+hfumtd^832~V z9m0XhXQ7%vDfCh<6$o>50%=ry&?tb+*npyFzrskL{BUF{p~VG;z6~tpA@|}`6@5&2 zPw+H18T(-x$eFmK-GFbezRRWX#Rgw>5q<@c{)I6CBjSTbB#;36$0U+UWBf}v9;1@! z<*Jm)^QXMFee=$(D9t1+ctyxDF&|9NzHy_NC9SUodOUf>~>qJiC7B{EbVWeQW95jZ5aNUp(uL#j}x?%z1OkoDEp( z@6+rJNV5oS#CmPXoK-JByY7|e*ROiv-52L>m@{E@S?*k6Y*l1nKHXWu?yGl#z!Dkd z;kY?aq<3zFXKsj#g6bgl8_ExK2;|eFew(`9r2Tl@jfqilYluT$cTCXpdEV>@! z^-CS!{`0`1IUDjb8tJYX0G1@X^uS?hL3U{rmrPN7c~kk~EgQc*bL=|mTZ5c%Mhuo} z?5Nb5Emjj2W*T7Cl)4u(;)(+uxIRO<0G1)B0$(mHmcJKRc6W7OzHnpHJD*LRxOh}< zlQgYDEU1vBSE@u+`PsFF;<|iMb#7KwPG%+C!hLvTq^xmlPE+-$SyQSPKR

    P1_= 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

    LuRlLq95dGGSD zOJ$pgEwQ0|3%Q@i_MO?MZk9jjZtEQ%oEYn$t-bTIB=6>?lmcmRX0W%+-#y;nJy8<0 zaie_iv4fWY>V~?fNBifx+s3b+f0&bbBy{yUfn|g>KFF33DS)Ic`^l?za8VA;TBHJc z#ee|3j98PhYg^8}+m-#@eY2BuZO^-}oT=EmB41&FnyM7Y|C zgH|K~RaV`s?QI_%8<^>NIbM0CF@HyShO96;U{m0VI6tqb;MLLb5gW2o^2!e1d|cT! z)HO3X__nuo;`+JATT+h&xo6o^qfC`1WBMr5KW_wuPH&Gmy5gRj9k(9<&Xtfsx8 zx~t)S|GjI?mrmTz-&wXPB{wl@yT4m1k0J7ACrJZ$mKELxsGA;r^=j(f%=o+3hKakE zJ4+8$?b=w97`ZLdC&kZI3XZkNe_dK^PQl)?+Nx(g9YeEIuV2*nTs%>oD#=^HOSZy? znW2Ks(ZSZF02ez^ie%S`!mEw7ecdmo`a54exYcs<(9NxBhhoDv`gz8z^@ zw>f>^*%LRORKFbQogL_$Y<}8%qTotmRF1$Z(iFYc6cyy>nz>{Wp)ezUzcgU8pG%6XbsWby8k)^R6mu!yr3cO{IaGkH zD1!avrLezb=*WkLJ@d_A6$^u7tWY7w@Kr#P;2jmMEWoHZ{wyqi^!fgqxX%2Eo%&7g z-KX(egXK>y1thAuQ?*tw5WXK^sTj!dt6=$|%=Nd2~S%KEEd`C&9j*nG_Y zIDh}(M+GKB%yfgybORZ1KRRr!v6c@-b0t{=nirxde02jc&%gODub)n#{Kl+tA7x& z0L#PRQ2sS6kHYoAF+B;_I}T-=Q5$s#A=<`l4NJ0`14_jOsp0`(i2{$M;*M8wCqm0C z|9xQTf>UwpVXj^Ux+k@lCJM+;A+CS`8jwD-jEa}7^kv^Mv>d_I)F=UmW=6jO}5?h>ZfpUkwr zFo%6<#V~YUC5$|fbGY{2PtJIf-WxurV>Wwz9duW3=^o z+sPy66|i*GUPRMhYJ*xXz$v+5m%Cx+VY!s0uWG@u^4YXL@6OeSlOt2Djop_{RfhYf z8KYgl`+}mm#FA?05w$j}cz^lxnzpI_$#*le6MduY_1%>h8j5z^NDSNW#fhb3od|li zSOn98;_mB_P@I3I=}FhC+1HJAFOTM42wfv*5Cl3(RHd(RDqoXTzaguCOC}+0UD>`_ zX*pNU-{|e^dr{wg>rz9yY@ZV=z(C1LHhk)}NZ?-t~fyf3Gu_WtwkwxQncp^K&05+gIM@Lp=4 zn<@Rl!o<)=8noj~NkwnhNO${ib!B5_@}bp^DNIb5CDe*Mm`96Q$w?CVZ#uB^RNbSN z{+@~P(N{MvKiZykEZjHS!y%4i62@ahIhsp2CNU0_Xa|y*4K1yNR4Jgw@gUX2g3DYs zDc+tG$HYmkaAFUKWO>wXXgS}rmUnZnpHw&H?>rOjyGy`GWax)mV`4m+>6!9lS1vv5 z=^Fn2?O)!$`o61W?B@9w2eNO(`W1NFr#VnUS$H2Nc9j*zheHqZ79?&=&cAf}?qK)m z^vK*`=h(U972qL+))F&}zYRHzXBzElBV8YV;C$Kb_U7)1;qmt7whN_Klf~Os3lr_A zBA%&Sz({tW#@dl$Y)Mfo9n%xVht8K(wY}(`o0=K!9e;AavtZ{{vES|$++;32+#2s| zf%Y*+`PxxJTx}%cfNcl1oqbf*I@mq+X70b5pLJaxqYW@dWY2X9<>l%05dC1;~8L1Jzg0U*br0RD-g;hgj& z0XEYR*u zycgRf$c+^*56>&wd#nCI*XY39o0(YfB1u}2jh=ZouhXIxAO&JA>5@5Pq7uwvLIQA})vhiz(H(EiebI{>*r zM!$`ZI_4%{zn*zJIrgfyqUYHDhwH>e0dDL0=3&+Zpw^X^n6)hG3ii51ZeLK(Ixw zJ?!FasQz@6mkHX-6t}{f>g!@39T%2Uu;0w-gpNl!o+Q z<+yHh+Odi&PlkIY-psyxHT8C&W2))#K-IOENA_GxmmCc7+^~|9;AtE0%8Yd~mkJ>2 zOE^>z(4pZ$Ern#z;GF-iXAcjWG5f>htSj5aq{H+eX>xIAm+cfGzbNx zWWWPVbo{8AJ`|0WWc3x`T8*IU_Jf`MpvwOtEI$lp{2i9>bCn-piBa}IDSIGQT=i9* z^i}yrs$8-v$3~5_LeoyH!_0(J4tJ(r zaJf3DgHY2^-9q^P8CV|BgJ7Ajg*dFGdsJKR7)LFAcJl znwh>D*9hvM>qb#>rz*LVm7EF60-P#`pw1zxa|!AKyqXgRnoi;JX>u6Z-d$ zpz}4`NZHZTUb;E8;QsBp-p>A4b2HBy8!PTqK7Lf+^0Iw+Xt?QF`{nc12~jyV#%qzv zcA9@Sg@0`U{|ba9$HXT-EaUQ-Yn^Q!b91v#Yg+TSmj}9Upc!~+FS1kn+*R-{9e@@|9gltSK zsI6@6@0e(B?kqiWF*#G+2KN@t8*?CRdh7;4z!P7 zzgR5_$*`sQ=`OZY`P^dZf0(NLk*WL{bLoFreESEJC7)9BoXRGQs7kB{G7c9crc*=0J{K zif%34kgZ>B(=gyEih6yyLGaN{pU*Vv@~|Td-FYj<-r}NqSkEZ(GvhHtx#fD^Yn}a z2$sD)!|&eyWn%1A&E2*GTdqg@9O9d7urd;x>MB0m!KbHw1OpjnNr((zv-QxP3oXyO zCWod#+`RZOE2+T4K7nEAZ>;N2Hwd!Cghl)9C_Z@o<i$}2B+Wu9NjPiNB-7zQE}gvbOIX#xu+sQVzl zbD|oo64;3{*B`ib{qEGnSbz86y&F$+)|dJ^X4{bfEW@ETtrQX0IEqJ$<fny+kv<2l@u^It*a{J1rSETrgyxW&8$>d6B_6EJ z386<%7F9i~?|L=&c3^PmVeO;cTaNp?rd!~Gjr9X;sqwKvhsqAuHa{JBJNxeYSFfi= zr`j3^&K;{+CoS<6Y;^#HCPcCD;VeR=1uBxE7wKZTPU@d~^3a{e#~rWd-cC-;w72$` z6+TFfELq7}Z%2u;KnIy2gG~*>%?+Z>k=s%}0W7_^DVa${H!jxncMiXveXD@w z^xbQX2X|hO2JCicCfeY`ndmSFqJ&KXFFGK}IOr%F$8wLWs2~#Gzf-Z2_R<(6`lSZEPv90 zKd5?DNHXL@fH%8^Kq`0%3G=VxgCXZ1-Eh7fH%zf?QZf4k8DfPDwnPR&BPjL!=>(9pz%=zg*{p*k8Kky8JF8ZMs zBMRO)6IERl;XF?rDDkD{h*5XMXgH!Ygh(}412q>UG&zGqP_r>rv*f9nuhB4z)i%k7 zQ}-coMF?aG9CjQAD}+Jo5}^uGgx(>j2dsVpl%j;7au8++RGAM4zW`yT0P(MbCBUt= z0ko+Q9rbe&dLRx$8w~yTLU1Qw3*owl;D~%E^a^$0McUfOwRK8$5M?mraRj;mf!_+l zCu$P{v?xLix}~}WS(DA0AHbMVVo)-uO?805PYa$6yqrHfAgHgLo<;V zmL}pCmP!BYvfc$)syP8q;ucb)T$~0UqveFsbVX@+;8a|Um3abH%ODN%dN_KwF0v4T zJOVcWQ3TU3)PdGjLQRPjp_tpLID&9+q@Y!o&>@2v9)TH^zzj=a2E{OBE*zBvBl+mi zt<|mZsvJWVsPQaH)dj8SZioH&x>IcV$G!M%zOwKtuJ7NDT(HW}eAkbC{Gdt-ckr%7 zRP_LXQF75=!iRlrueaEaq3`MIDBHjJWc96vnejJcBV$8D{iCD9gM)*uFFP)rzLhT9 z=WZWO&~iq6W2f_Hmi{8P!4kHilEZ4Dc=zUlx(5wIy`ux&W9Ls)#rSV$kpp0hZPh+! zYX8X|wbTW(%o+6^AND0v;|m6Sk)?@&`)Yn-?zU4cO`RhHV|`tNWyR&<;0&sPyUrq( z(jOT-)4+|gy^pJ&4|b0O-IX1^8WWUhN%YeG#@ygLHfos=yVM!C)CIT9#b^oNV2OjF zvK`Mda8p|0oy(6V2B#rdo~{V@OEbZ`DSbiLUd*B(yuwy&EZTkX<&*B2(V4lK$%fh| z$8t}GdM7aqy^%|W8eiC}d}g8cpQc)0nKDrB0Uk*w3!pAIz}T(N+b)*gOcG}cY}OD_ z4tg4vu;omRZ!DC)Fjf8>nw3J-apW=l!o3qjzUdLZo7^3wmN*~1?`*Zdvea8*>uDFe zJH4#-){EiJ@#e>!hxeRyvx_9^III09csOgVFYNUeIqELrYkh6E>~s1zf52%jW0+E0 zCE*)R6_*cpkF-2(zka4d;=j?<$QwL4bi-A#fqO5UcsSJes=s^UadmS}=E;y1Tlw@v zCQ8hJhnwmFR7ChWW$Z{Vt*vSW_#7LZyKtsDE&hW5c?hnR%c6X?^Jp>?M1+N5jI&u< zdcu*bmmc(XkIc=!>FFA|P*xoqydOBn(okxtC$iR$;@~74T&z7>YL1LFLxrt%-LNC` z*pr7ZhWo~+$6nvP{w!xh=_>AeGs6&Lc%X@1uq8T7w03v#!8^bn69aRtjh&?cmTS_v z^k|Y+fSG}WiISNkMRr7qt94Rx^r4f7@3g+?n;M_)YU#dIT9qOy@V3t|H;lGMOKfp* z4#ap6_P97}l-R;h#6*icY*RDhj$S@hGtxgbH99@mJ9zHI)%CG^yzLVmNK#Avcv~#g z@fEr#2hRy3!O>JEG?jy|jtm)i-W~vpjG6m5lh3K#v{P z#8^{95luJ36d7TG3b(?9m>K%hbXT((;r?Fh_wPLU;9mXo^h{6J@a?Ph+cuQ?xomQv zN-T`R!F@VVqS@3a4kV3aE;J8A&Zfq3p~_VN5|KSV(t#MYlAXFCw%}4(^~k{V_{dy$ z`^d5Un+f5$9`@_(DN;)m0BSVU`-djwn@9mKp}Zw6mQMv@TqiJ2nePuIfC^=k__P!O zG=LL*Kvo{@vVcPg~E8^Y^!<9bY5dXitu%!NV+!!kE}_5N3wqblq?l ztF+hv0LzM|$6aq`-vLoqS2g6UKjkOb0`}C>DAW=eYJ-Yqn3wl z)Jo3AOj*gzi;o6+hF;IT9v_)`R@+^idnGn_t1C-tVH99t6vRY_+Y=;gqLfPpq>mST zoCPvJzEb{6V99?E%fAua`O*WZ$+P0sO-pd3CqliB88S9S4EBqzx0a|0r7IQP!lAxy zijT#Q9~M98{`%WS*KZG&KbL&^t-(@p^|p`_nO|fGZX~OFndtbK=>`D2SsRA23?o2T zzlSA=UjWPZb+8ZxLlqIi1fDd4CP^|4p^=gw;yp4$KaKZ`Fhk$xHbbB`JO;tgp=VEH2-{>u-+|LTAou7KryPK*d${<@Lo zb4@BvSQSU8s83yJr0ImzbkfswHqa0nX>dvEHWq5;LUj{=O{z?Xyctf&LtqXgjEdp< z$6$yfFvKC4-cRc8A2et3e;5E%+K{OLZV&3}Ln|i{dU*&vfK2FLq3zVohr{#WuzVQ2 zP)GL&3|0)&ItkN01=B5qp$_X1cIZ%LTGTa~RIUb{u5Lk4v&E`%u&P2R&A8Bs$MKVx z|MMi^x?&c{`#j_?dlmnpQyQn{f>n1>jEQFx)E)2|9E_IGNXykw(-S-{UB$sg)ihj# zm<~7EqgY@GsS<8*7-~&qa0sF!a(+>zV#LVDLk3`(2QxVM2`rDmkb7XLco^AR$J9!l zg;V7ks=6Afx?&V5)=v_xA4>y%dzk#|*OAL#&%a%`@zak?qM92?-5m!6zRXc?Fnk&)vYi=vg*<9o<&B!Yu7QcsiHhsh8lpA#SM?9t7~}5hdmQ_tnI z6%qa^CRi8cFX(`{#)y@XE3%6Bl(#?Yn;xAW9_+tz{&I>W-JZSz_N^7zPW3;sbpB)m z`;w*mjWreF;$auPC-YeKjk<}EvEjbqmkn*FkCkVp?hf%yaN`Bpo3FGWdQuErvEaRE zxd6G8i&f#!U_1uW%?z{JSa&5s!^2<+7rBg$*W!n*Nt^; zE5T_BtqB40u)Iqr9}oAv8R(gK{P4w&tkTexIebQnHCAe>A8CdRWK$vnowIjmoU6On z+21ueJ~n&l?1S~P0xxzl3m0Lc9cYabag7tW#_{v152)%AT-VYQ1d7#zAe>AR9jP)7 zA&!NXFws(X0L#eSvnMNGJ_oRT^Q5LRe^;5vCx=Iqo4_N@kugqYDH*aO*UKOFbPi9B z&pvPLI-Fa+TA1cQkuu;>O#Ns!N-8ADgk(97AhR+QnHh$ze|DcDv1;z{TD(B$m&Oy%_lyE2akxNZbb4jm?Dq9kmJ6!JDhE;L&RAWS|z zo?|R!QzdMw6g+!E)5MkBj6kogVXJlqd2RP%XK+oE%rO!sPGU=z3e2RgtXL0+STBb- zZwFb_nk`w$M=zeb*WA?o>eZX>&f)8qA8%QA!p|iOP~QrugB;^P6| znHh$0jpIT+at>r)tgC1l?wOdGeD$dMdG5}0Yg{tz$#N4|oE0*jgO3wZrA}0_fD~ho zmRRY>nd?jJDe{I}rjDe?j@=kfpmc*kTHp!Nl7#1N(>{oQ^$dk6F;qTwP zo1Gkg_Nbv?*NGUv&1_l}!yt^J9b$=!uz`}6krqY~483qyW@=mz1k1+SuGiCVJ6ig# zT&zlt$`vx?EOex$K^V&@ii?kTHcsV}lI*bYrUv1Bi}<*RJtvEAbhP&j4~=%T^&ZW; z9PPW?8XeCxkn@P?$)QKi6jgS&bdQe?wYRmOC@zl<*}77Y#y5)>m`Yu(<5u&Me0Yhg zI5JnOSOHziXTFfOTo*Qrt4#c4z(jhL+MJON=iJGC|1-62uz?*pi%a7D<^;XLds8D z7JmXu88pL&F5{WRvG5V5NPn`<3apwd1{yRCwU7jtSc-7|mw$f!9)Fkk_k`s_#`5n6 z%Sc7CF>C>rQ2bDpih$7g2`T4e9+n~Vzw_Rc0F!=nm@iG+$5?xnVg#ipS;IrokHkKL{w(0u?TL;8i{GYKnjo!mdQ9J&zMn1>yl(-PK6b%|O#lPt(;9 zs^qjcSF;kRGyJt_GB{3R}4oTg&~Vzdil_DO2sO~{}ZrOL;+&nPI`&}-$M!2 zgWwjpUM?K5ACAa_Aqru-M-Z@M2%VD%#7P+Ph&E=Y1}Ryc?x$hK*05w~F!Aa(I28x1 z3hxtGI{wpP>55f%!>J1i>Kp|u*%&Ryd067roK00YuBzq{8l;VIqrLxsuq=WhcfnAx zI%H36Qwwz#_IFtR3@kq>%U@`mMo@Fdsd}Q8Iq5HAYky&hR_1W&K`Al2uAIHs-qQ2> z_3O#W>1Pcu4(FEz`6OVpZ1kYH7c9hAZ2fQe0G4<)S5qVJ_3?Wvuh$OujSqB<-n>+k z7Q4%u?2S^l*Zk64cQG5i+=ZmJf}*j4qV5IWHc`tQbicLKTWX0?v+?(gJ$dw8^Rt%8 z(TOJyoAzxz;b<9yR&$<*Wk%dbSe`g?CDMPLDb7vfD~8@;d-PHPewmXZgrC4N5J2VD zrP?tCEU%uw8x@$wz`4!C(nNPv^yp_3j`okXzI<`$K!LZ=kBa1Ker=)srJe3K zJoGXlMoEBC;^Nf!Ox&uNwHu4~oqbu?GCnZ=ZtnZRo{@&y=a2F^JvLygJanf#A}2l~J2EIGU~O!We{8fUWy_{L<>xLBc6W{T z4)r`AIJWOvw9j@MVxW_yWL-?r<+3M(J+JzE#vVU>4qzFwVjI^)4q$1HjJ86B@=c;c z-M8+~y7crx&rt8o)a2`{7awJ%6t5AcLlv|75q3Dqr@0ZHNj%SF0haUm5Jx}`N&*`n z`%7SHVJLPnPs>a!zImm#t9@{2V7%sG{pE?aEz5(~p9z)L`^_^{m4qg5@9LlZ-DZB3o$j$fCB z=Xls8nHz|#F>)40Ze|cAV93I~bMkjwtGnMdHZ(chKXCox&Fth{H&&tzUc%57+2Ip_ zDxFPJUCmS7%u}4{i9AZYIWm-q1KW@U&Y3&cs(U*7Ud_(cRW}vwy(n6}(~+J`(-tvN zVyG|cdssS}%77}t69s}xi{(P4s`20%1F*Cq#xl?%b8M6qLBt}*a7`0jSnGTQnW5fW z#Qt05kvZ$7yR(z>cWgLTl6U9!#TPFd2FHfy-o5)vcjw@>OAj}v7Oxd%u&MK~6a%$# zX;SWcSaN8I4pi`PQlV)qml9)-k75%tCM5CqG50Dxs@NBgzQ6+5>c%}Og=AAe|lTwZ!Y-lpV(TT%{g zP0he0rR}bM_{A$=z%9BmHBO zV>8d{+6wlTivzcD7$G*qU?6s`u@tIDr6&nZ5`{FGA`<>7umq1H2e9Ou#5+*Lmgo>; zgb!ZB1DaZ?0!;$Psr(Mh-&*{8!E%1Z;5^9)s%~TrFFI@ufZReIEE1?Pf@uJ)#F!67 z)7KwPs{Fygj|Fo=&051gBpc`B2c-M}%Xv()P#~b(rj=okxxT-duCFO#4Fm22tV`2g zWvsQ5qTx+a_adr!DArH9ysvI`RCJ3GfNwt4<6jrM{y2WK7qWl1Pb$*WidQG7pa4qJxXmq^!~~v)5oz)Y(`yK1x;bR}YBdA4!RYh8gnT zhu~9Q{zG7?>W)?O!mB$IHMm3#JG`bnMw5@ya5V%kC>2)=Wr3%vWwZu48;;zstA7Mx z@XKL&5RO!o!WtfjAy2>z3UrX$b&O)P$gY~EX6iOrRUQOOH8<@0b)i3itwVFB^@U&nCy>AQ*1TdhcL z7)?9aB1`0V9ITQHQQ3>6>P1%b#H$F=N^ImZrv7pZq_TyNi>SDutntb7iQ$RH$1MeW z&b!;i6SO>3KC|GO_-&BpJihyEsAnFQmm~aA%vwJ2 zE3jEX(&OqZW+4`Hk>3gND&XBlh+WP@E^)xC2?VCWv4I+c<_t9iaNyEJs= zc0MDCg_A->o|rHJBPPsa+y3lJ_0`>jJ=2pDudZEsl%0Ca*C`!b+FBVz+T*1HD19M+ zUt9++YJrh{H7xnGM7plX3MF;3T)#QFq~cm#Psi}^;6%-X1z6fsBuqmo8=D{?CJHHX zM~a+JmRqBuEl}aB1Q0CmRXl-`oMUf3!jd4dGy-mnW>X~z5eLeOD_WZdCx>U-pLd); zenTFy!_zj|94TU9gMCpsA?3n)o!VgeH*ax=10{p9^QRXd$;*fRr8a3 z&!60HtgmhWUmsUB)mA>Qt8Qs(=$_bkNxG|Qid9~&$qCq!1a&_WVpIi&YCJ;?4pz&-TGQ5BjVV!MWT}()X=4lF$YZ*? z#}V*jIyyz#@IwHWx`rU~e@1uzyI=_|r$m5&QkOagg*wPW9m4{cQ31jzU)LxXfy_f7 z4LhCJ&#c;!780rWdvk#8VgyTgpqKA&LrM3l8lWm~xj8yeNDSP9Uyzt6y?_miT zIj>5dBK|qB^uVgF#H+awpe{kScnw>$1`nm~Vx;CxR&lpd7OqfbN;Jt^0GJVazXFy} zBH94legqtD7_tP0Jg8&1S=%T=lkB8nW~y$BQR4$uq7<;ieTW~z@;Cl^{6XiiPpc|E z*b?HUvI}0#gQyP3=L-MQ7XB3rr{Ux3z!LSHkgV;_#QSbZD|~dXX?$?1yLIqv$<6qPEDM4&M$;C)*wSz*7rWdU zzucXm>_Jp<$0<9al^hI}SO!WK`buUih2e#{$DclG93Pr^QQvtq_p&!fPSWvI{mgN4$UwldIDH#FJe()o-u1Sm*wB+c`-cHGgAAoW^=|4doxc0f`?dQueU^C zw9JL5?nYE~#wiI57TN1BvLk5;IVNjEyyCMGcOB0^S8=uOd0lT;%kV(=$ne0>V1Ivq zZ%=!3cf+IhimT5`58vLNaV%!-c2~;;8r(cBoKg>toMRkogN|e468J>9fSe$p$N(%^=om|M z#A?Ts?9`92ymza4Z}vq$r%fzejJaXddsyx-Exz5_G%ztV+t$=^?ihgOP7j-8GlM7= zMrMNpunc!Hm&f?-FV4O5>`C9m$Yg(a*V&Wj(_(iyTPHbCWGt+VLrxOV5*5{ev5qDZ zM_MeGEVVESX5s_g93-i6J1?HO*51s&Sr^xYMebzY>SC9Vakk`WJL4!1hxll}O*=D=AK6=e zx~O7XDmcD-+?XkztTc)5fzrJD!|iVXEc?2LPMx?UlWgHwgfoc|HiQHYG0Bmf;!I6& zrb?VCVj($BKuTg7iI~{%Rl>x~)ZE+Gs=M3!zJK$Vr}x?qZ@=d6vv(jP%51h!q^Q@-x^(260 z=joGICBfUdCSnN5)L2L31fVrXD)h$-HX$Cs($yw0DQ4f9lQ+A%dWHtaTATZe_FohE z>}EoPI;EbL>vNJ%RhBpOcMQIonR)wWZf1IVcyMg6Z+x(4a=3STxMym(dvv&Gc(iX| zv=4k8AL*MO>7N}Lni(FN93C1Q860nI>^^n)YHG|L7i)2#`}&RX`4v}c2YW_``ljyP zdcG<3Sg`j-u4%X}3BWQE7!OKU(o-C1$zVJGUab!mjRGC50v!NL z{e!wF5dU{z2?wx*3SuEu8i9BZOF&Bfe1v`>&=we04Lrx*bMM z@H;Gj3`>GyT_sfhsu*+$REb{Zh*5IFskssr<92nww%7dz941G1`>6D!-Bq_APmaxX zw+~-Fe=jy7+t$Qa<0~upHyne-P6poyk&6UI-w6OLSw!FM>yOk`zZ@T&?tIx_dgO{E zB*P5nj8e1F`Nm=%me}R4cqKQY3V2*TYPmgf8B2eeB?xap_`$tJ^|jB&ho+jJ_7vw{ zRlw3+`7=`o-1z)Z)BzUvq7#{_4X5kA1uBW6u@S^jkZ%Ym+u>Z%8s>vq^Oya{jtVu^#^ zVu8_82$p1Z7m}I~^&LlaQ`-@X3$adpFs zXU}^(`X+`ZXD8l_4NSE(c3wJhf3y6Amjl=f57;86k*Y0=>J4D|@LuEK;NYvblY_&Z zFJ3g=zx(9Q)!G~9AKW}&bNl?GI~N~SUU^(~>(Twnx(C%yA5=Hozt>Pz`Q+}MM|Ue8 zUb|3n>hP8AsU=aXb~sSOJ!})wrA1fI09elS_YOaL*sy)$@gUF59GZ-Y5d&CSp+ouf zm{9ixSoU{MjE_%WxmfcFEF*piECrMVE;0U>!qPeez_Q}%V*tz1;iI9EyxXiGyItkP2vV>;+f`&BOBinQLt=op0veKCkO4Ew~fwzu(<*y@jsW z1{2GJ)*>p>lC)T$%6VAMs}g|6o+P#<#Mt0tTy5e**QD>+a{R`{>W-$~fsWDs_R;40 z&PR6}AKa{~EU&qC>i+4%n}s_s8q(mPLTnx@95y4(6IuGVc$EA|zvwVr?Xpvg4V^fGT<5&@8|bN+a81Vw@PVP_In~ww~Tx+ z!HZ#Q*7GeQ=}132lGu@vqBz8{Y$$0dWsZsz$rtP7c5B?H(vCxfCC>#lZ}~ zQe;a=W)qY6BsqYk3pLi65-TLj1*9~lVT>g@e5GSzW{Luqt-Wt&-__p*u)H4Vvc;YP zU>Pe~n|JC+O>5)O+~lj5jV)zIFNp&(-E88RxR0<@JkL^FV)Uo5Y^?2kJ@o;W+qm=? z1uUfkASmO6_ppq!LPxsV$UeYwaB!^U#iy`@GM2m7U3hTg<#6v9faT=GSVvoDZFT*l z`%Se~&9!%5)KoS;tf;T8d|X#m`=sj0lY5O%?zcR?-&S+4wet4U>({DpU#q!PR=FeN zNc7rlC#x6$%glsB5G=bPSXSM7o|Rne@3G#_IMA99VvUOgC!v6rGC@){~h8t2}|csVL3l*#1yd>2+-Onob?GTf6|jbA0kCH z?EH+7(2p&A6n%O=%~-x)Lb=e7hYt5qWGOw#8tz0j7ljxX;v)_hCKEstFNo^Sig-Wz zLe){>%pXhy`2j5dRUH-M-QA$EhtSXn7Yww%oI_Ey zp{X-%HBG&>NK!3Qju!c-7U8TGx=dTQSVub#rjZNN%!9!IKMHh^hhRpB;6}h9|NCL7 z=t+wxgzFxL=^xfHgjA_x2>A-G2Te(V!wTW>qcFW=F#V%2!$KHpmnI=YjS{X-ch)qg z!7Y%w)>^u3gtn8Rnm0~)C29F8l9D%3#SNNK2@PlwD1!e<2o$$}m|*$Kq4ld^xk}NA zluJ;v#jD$()j23NCzPtEv5K3miqKchO0G%T1%r0*7sC=-H#-l@!*JwL7!-SSQ0uj^ z{+d(=bqkuh14cuL*6=|88^iLaW*tFqL?m_h`5-843BgiXsHjzj`eq@%veR2+N7i=o z=0s#5T^|lX{pRSaPwwdERQECo4-#{5lj1p9Ki&u6gK}!h)P$}$E8~vp$LnS*O7xB?U zC5=yBOpeSpKJF~oebL=6j-chL@|h_c%2@7teE0cK&qP~u-^rrO(S92&aGu&u4e7Fc zXPYRrHrq(U#tiS461)4}o#(yXqhq5J4Nsn)F1ffddA~d|M-s3#A!K)Q_<^*jymaxw zjD&;P$pu@}k8Isoyg8#dd&A+Z^#`-p@6SlwnI_&Ey=L<&PMQrd#LHfum2m9Zxw?Vg z$^PEKM-QLoWR?VbZJCFqnL(tbQ81S#3U=MHH}gD{vFw?cn3(w#mez(pld)vT92pA( zHa@`81|$8cQrN$Or8PQE0n3t#tF=8HLnA|zb+s=J>^ki&NaE09nMP7ObQ}ar3It0Y zMb5&;FtHK7&S_gW6h5q~@9!CznSA$Gurvs>LPM}j2tRQ0XhqAj!Lfn4mruLS9K9tE z-|bZTw z$TtSNCUd06^NbVh2yqO95KCN$CodsADev0ls;>6F*E4S$YC4bS-V*!naWP9ZM~G~& z(gjr-#{reGDN^v2PmgyrmGhvrY7!f~$c`umLKFFI+Pl5*?#&0?Ej?oc;~g)0?%#TH zy7*@9_ER|OcpZe~Ok+-kk^>+>4 zxOgu$c9$0?o{kK#L`U1=WNfmW3;qiYYSg4?|0|ncYo}Ol2f^DCBelRrIWWYM;GM;} zS6ZL-kM>Sa49r|V{VY4-+zNJvi&bLe${oiK+#c?ln;v^TG%#}R^o^vr-E8w{OPs_S zlV(py;#1@n#i<=0=e#9g{b$J5*g!*WWq#cJ^)U?U#93m)7t% zvIt`Ef1~~L&K`Tz)-*Ib@v6C@rL?F##xL8&Ist4s6C<_7$8(J16)RdHSc3Dx!zL{* z=s;;f#q-BqZ>Hb1G6t=Y*$#n_+|+)cB0BwxCBwPmSQFX2 zDt|33e^t!a$0~BaB6Fia3T!1--F2ZNOwnNh2lYpEU5J16=hyG?4~^eGEJ^Af#@Z{* zbp0$1LZDfZh7s>!840Y&GKvQA;{}#K7c8Sl7Ajm3(BjE?Sb}$I3;iGq{Xlal0?hRM zO?9DpAvB%Uz_g0~uI`Fv9?sBEcqk7!AHol+{4iDWQ&^HTpil_&{mjYVVfi?^~9)nqg1>w%C1-?0ZrN7O3j+1X}L;^mY{{%rj0(VgDKT9JgcKu zqN7u&qqPsFwGR%<1@KTL{R*IJQozfx5KD&(5jAT6*roSvx5phK;1G$ zi?|o2R{%#W%o_P`VF{iP9jF^qKJ=T&BDf)lojT}bEu4=A%|_jdqQSvvI-@l`G3xIB z=CJ(nGRyf+u!?s)H}E4=3Jc!oG=u~VaA6@td}Rw@Nrkzr;)}PeKk(pg-PFW%XIpRi zxr&6S%^b5}_+k!Xu|R*3&|r}OxtI@NiBlDt7YCDIoNjrb4yzNCNfMw0y=ex5{ z@GT-SYK|(OF}NlH8L@lo?luqgOt!xSu)HGjOE<@PgZngC!o@6ifySk%c;J=XP)i+= z-|>u;*+Q$Zof*d;+#}ZZ z`r(IFPv>EI{}Wi6A;XxMd06H_&3hV#$NFA1Kj}Js>I(rHLq{s#jK$QrkiRj6IRUC@U79U5~4`C9* zd|cLT&piIH>e)cg=-kws+RB%QaxRB^Zx_-NE%c&nai74FvH(lP+z~nW#*P@n!bJhF zd03}!PAR;3e44{Qm-IDt=* zaR~7oa-7gSJ~m{}vBF!8^&PKfUrmosH9UHeyW>Q}>TDK4WQh`+8^qZtY{@qP5>A+( zD+3kTLdCs_Tv{TFm|%vISd%2K4k=kF$8KJ#n;4#ZHSv0^f9(9Rnxu$h&Q{4hdTg-U z=7JrUJDP?kM`p%HCvIG=&RkdMWRt)Icr#1^55b|tJJS=~7;+cmBmptS0i9;9FSWwP z_<5x7-dxh~sClG+?Df>EdsiEGrJeS&OSQyASmI)00&>rnK(L${2e51_1+Ve7o1LxX z7AUb5T55xfgNCd?^}3P;SlXr~gyfz&T=}A|`_0TpSlSy$+L9veh$1doBA~_#X^A|F z+-?Du@}!vk0G91--Gc*TZ7=(a4*Wm%?gFaKY+V@tTKD_@=gg6j3Kk@S1c^4QQzgr8rcmySsZ!-Jq1>P@ttYbM9LI{U&XPndzJ}bH8)%J!htCJ&P4W zNZ!1A2lnsXdq2;G3IAr3B|;eusTn_&k;o>LOCt(X zhr}&G;Bp)=v9@HjHJfcM#8~+`TZg(>Ps3P85G;WzgUFU@vXz_wlMrmcC|UJGSbhwZ z`BeXR!ZHYF9cqH5f@C8hz{FUX%mhn6mX%6wElsrbnr%;9gK%p6HL$GvAuJn^ZcE@; zqdjq&EyD-KA=^qZb^)JZIWZ>MlK5dk?E73k5G<8MTlGX(&QN78p10=m`D^1ZUUYRl zJ79vP#3LS>vHVKz{FU168@2l+6@aDtR3*XAKP_rrYt#P6cb^XRj6AyitbXOrFu8&1 z5@`EpPuo9vBfk`2EkJ+squ2$wTS$;!`8xd7+ud5qCB>E+R$V%KrN3)nr2oZ{y%)e} z+lM&AagxB|KbUfMTv>KCfMs9j$fJ8tH#Y7|`v6PlZ)EOM!P^PMPW5yBM(*^b*lCi8 zh)_;fW;Lwbee?38@810F@!hVSn~o;VDqvvV!;;|`teH8dwR+D7SYDZ5R3&6YlMo?J zlho)*f$mel=t_aL6u4V(yxfA-p2?Bwyx1V)bXBs5K7(lE@BF30;s295{9ifz4>H7` zMD~C5f&GDI{}(FGffFQ+sVH4>`OMY6?%p?VU!Om7V@Y|Vj1%eZAaJtsjSMQU? zrM|8QqepjLn4PuE!!;Q7wQ%Zxa1eh|V<*j^+a$8=lbQDM40tTVF^1t1>xqjOv(v)m z*=e(8YoceTMHYpNbHvniPq(O0k#RxZ#-n?#4fKxmcAH_j;TOVkrn*#0&-6v7iU?3v zShJe``(PO&H;R4&O9}atuzYKVk5n0gvAj*H8X z(T#rWVl}H+K`W3_av@l{BnoNisgaACst@qJepm9)-M&Q;KJ`0hF} z$?$P0tdypQg043gv=mV?`GgDrOMkDzIKSo1s}DW6-99$_VxVXE|T=G2Esv-tEB z20EVUn#6WZ^>9t2BI4XFBUtEYf3CKyp!Vp#^P|Hry4w2>@4i$~*gQ*BA|$1H16WdY ziuVOzautk189h%*&w*05GBafit%8wJ$?Q1?NHy~t*bYyDtE*NEfP>PTtZ5Oq-1eP>%|jydY=xy7}aP;VotL26b zz{70U1Ye?77Y|^0`O)p(7elY^-+Z#U>2TUC0Ly$I_iPTv@B>&9p{20j!}7WbmUp40 zumF}q082``kgSnVbaHC8ik2rM=L+!@B$Sn_Z> zuB%Z_n4cHFeoNi?$9H=Ao(5wamprOeH7-OvzpSKBnZEI5}yamYl#v^^anrFi9}ADg565inZT_wS~Xs z!RxPW_g@mwIM^}-3acQzbpXyf0J^RQn#MxOwvY%d`QbJ`DYoo9IAbw_ybg)kh(xbP zIyNF5YLK?8QTD4*h-yc4Ey}$Sfo+7lH^R~8Jgas8?5wc=9Z`pJszIUFq8zJHE^AS) zHAvTb04;>mI)q~j!l?;`u6D#Nb0n1`sd_kVx;Lft&PI&072{zt^HS~iVz-$P*5*a9KiEs#~h!!i(O9Ylbx5hzJE0J?H4Oo6dc z0b6?5$doW)sy%x?oLGx+Zbmr$LRi*AE1Vr6UP8=9H=TdnN||Ro;wypU*D}{hYU~t$%w(0*U&T&eNzhYe)7ARr3!1K;zd6u7G~D}Q z|F$!_#0mjx7IKP@hcA7m{0Cjmj-PL+zI6Ogy8rg(KOfzB3VtPV=6hHozUHxt^XCWz9;PF?)5z=GNN% z8yj{MYAcnV2^6?LcwNi?<8AeSydD0?v;Tr)^9PS9|Ca*$iq6ETQlgAo*6qH3`~JJP zudZLZTeEy~peP9om)L#jrRHiD&E9(9L`Pre>)V$*8dq)yXV}9%)M>KVbi9P>f(9p62cb9nYkab!X_!%nxv4*sc!htOE&{piWynpr$St|j0CAtPBTiW5G*;^l&An`DeU>v*PnIvk3D~V z_SoH(WjiBP^L?>U-9o@iKm|i$^`@qC584KXy2fu`d9-fru9O+YQdT0_VVV~@(HEQH zHK|)^3&IEYP|CJ{=mzzanNZG?mSzPRU0bKV>m~8pksX8lZ6DGh>$J78#(Uj z9foE3aq~n(9l)@JY%W+2)n%E$Z>Wx? zkfa5$1fUA`ot+l8c1!))uE&F8gReUu_HJ8$Fgv}HLy4xNqloZmno|oAuA;DErm9dtPVsV06hoCWjY^g&B`mW<&Mc5I zj1oqsgq|UxrO9cT3aUX)Hj0S`fb(EcerEFW4NZsd-0T<|dHG^w{Qk{OK(D;yh6r() zFGdH5?&X%q!6kAD$$UaO6!gAh954v`4Ihm8bGFX(ya!&L>CwsZ2 z@NmgOe2M^<>g}9FvybQEGeV_>A}sO(ScVFZ*^^LIi5aiQ2?jd7n{e!<%&o~8Gshcv=o-80dFLTS7?Z@+R|{+ zJY)Ij9+VYU8(%48qzkASLW)*Gfz++0=gTSiB0`Q2CL@SnP^7B`{r2&ruHK&KkM4Ij zt=X%IS|T9mIB2~XTa+GNwYGBq&C4Bq&qlgB26t>eot?2VK#EpbH!{ql#IiViv3Dg(_OUik_#U8~?emG-raHm?0M2kW#aR z#0+n@cp7pB&L#+`(#=ARvG&8k{P8d-y@F}z^?8rw?;?Jyu>3fX4W!tHGvQFJk)OiS z7oB3-Fqy(ZC!2482mD-s$N0D;c{#;xY(Q7ptvCIXt7q&rNb+J%#0q3`p%LNkiM zkZK%M5Y`;(kFbQsnl|S6v?qTG%lA7i&3n~8{)(0QV@99f@Zj~=w)-!GWe~w)I>90W zZxw>I_H&2H-C+{Ejeudr6IpY@VO|+_tl19Kv3yBpx47)Ho=|O!@--v zE=7?`QFJYw8Da0qv*R&r`FNPn%~}CqiJLl&G<7-+z|sP+T#dDsVQj=$m=tfLAiTfE z;rG7M&&O_T^{e(({#qu!M@QeE3xUE@1g{ zw*0{~rj;KK>JI@pivZ*o64YNLWV^s=vdjggRTocR9v>O$>FhbW_e_CivBEnZ`3=u$ zlEihg63Qz(MdkdZ1o;;c;!AIg~veq&kV>~ zR@QX={Jp{M5dh1Fw>!74KllNbOvG1QmUFN!YTo9WeI2)ZOt8E%uV9Uk7E81bLH$+f z@^yggWVM@x2yNl*YQPY5{4YGj zU-|Zb;amRE6ZW+?9qXSk)40BI+nu(%?_NXY5Z5l=6evi+*h;Pc!1f_VY2%me*?Os~ zeWds4^Rq{;Ruopph8X#@nQWJ7bcY!n=M*kl

  1. )2@v8GD`jWJg;gvo+j@BSm8TE; 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

    8cn#_r8}XL$0=5I6tA=bhUJclu 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�r}?9-2{W(j}tzqHwH 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 z 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%0AqGVV`gO|#e_CS#| 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ˉ`oS?L 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 z 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 z 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 have been designing software to do particular jobs very well, as an extension of past engineering practice. Each piece of software is designed to do a relatively narrow job. As the problem to be solved changes, the software must be changed. But small changes to the problem do not often entail only small changes to the software. Software is designed too tightly for there to be much flexibility. As a consequence, systems cannot evolve gracefully. They are brittle and must be replaced with entirely new designs as the problem domain changes. [2](#page-20-1) This is slow and expensive. + +Our engineered systems do not have to be brittle. The Internet has been extended from a small system to one of global scale. Our cities evolve organically, to accommodate new business models, life styles, and means of transportation and communication. Indeed, from observation of biological systems we see that it is possible to build systems that can be adapted to changes in the environment, both individually and as an evolutionary ensemble. Why is this not the way we design and build most software? There are historical reasons, but the main reason is that we don't know how to do this + +generally. At this moment it is an accident if a system turns out to be robust in the face of changes in requirements. + +### **Additive programming** + +Our goal in this book is to investigate how to construct computational systems so that they can be easily adapted to changing requirements. One should not have to modify a working program. One should be able to add to it to implement new functionality or to adjust old functions for new requirements. We call this *additive programming*. We explore techniques to add functionality to an existing program without breaking it. Our techniques do not guarantee that the additions are correct: the additions must themselves be debugged; but they should not damage existing functionality accidentally. + +Many of the techniques we explore in this book are not novel: some of them date back to the early days of computing! They are also not a comprehensive set, but simply some that we have found useful. Our intention is not to promote the use of these techniques, but to encourage a style of thinking that is focused on flexibility. + +In order for additive programming to be possible, it is necessary to minimize the assumptions about how a program works and how it will be used. Assumptions made during the design and construction of a program may reduce the possible future extensions of the program. Instead of making such assumptions, we build our programs to make just-in-time decisions based on the environment that the program is running in. We will explore several techniques that support this kind of design. + +We can always combine programs to get the union of the behaviors that each supports. But we want the whole to be more than the sum of its parts; we want the parts of the combined system to cooperate to give the system capabilities that no one part can provide by itself. But there are tradeoffs here: the parts that we combine to make a system must sharply separate concerns. If a part does one thing extremely well, it is easier to reuse, and also easier to debug, than one that combines several disparate capabilities. If we + +want to build additively, it is important that the individual pieces combine with minimal unintended interactions. + +To facilitate additive programming, it is necessary that the parts we build be as simple and general as we can make them. For example, a part that accepts a wider range of inputs than is strictly necessary for the problem at hand will have a wider applicability than one that doesn't. And families of parts that are built around a standardized interface specification can be mixed and matched to make a great variety of systems. It is important to choose the right abstraction level for our parts, by identifying the domain of discourse for the family and then building the family for that domain. We start consideration of these requirements in chapter 2. + +For maximum flexibility the range of outputs of a part should be quite small and well defined—much smaller than the range of acceptable inputs for any part that might receive that output. This is analogous to the static discipline in the digital abstraction that we teach to students in introductory computer systems subjects [126]. The essence of the digital abstraction is that the outputs are always better than the acceptable inputs of the next stage, so that noise is suppressed. + +In software engineering this principle is enshrined as "Postel's law" in honor of Internet pioneer Jon Postel. In RFC760 [97], describing the Internet protocol, he wrote: "The implementation of a protocol must be robust. Each implementation must expect to interoperate with others created by different individuals. While the goal of this specification is to be explicit about the protocol, there is the possibility of differing interpretations. In general, an implementation should be conservative in its sending behavior, and liberal in its receiving behavior." This is usually summarized as "Be conservative in what you do, be liberal in what you accept from others." + +Using more general parts than appear to be necessary builds a degree of flexibility into the entire structure of our systems. Small perturbations of the requirements can be tolerated, because every component is built to accept perturbed (noisy) inputs. + +A family of mix-and-match parts for a particular domain of discourse is the foundation of a *domain-specific language*. Often the best way to attack a family of hard problems is to make a language—a set of primitives, means of combination, and means of abstraction—that makes the solutions for those problems easy to express. So we want to be able to erect appropriate domain-specific languages as needed, and to combine such languages flexibly. We start thinking about domain-specific languages in chapter 2. More powerfully, we can implement such languages by direct evaluation. We expand on this idea in chapter 5. + +One strategy for enhancing flexibility, which should be familiar to many programmers, is *generic dispatch*. We will explore this extensively in chapter 3. Generic dispatch is often a useful way to extend the applicability of a procedure by adding additional handlers (methods) based on details of the arguments passed to the procedure. By requiring handlers to respond to disjoint sets of arguments, we can avoid breaking an existing program when a new handler is added. However, unlike the generic dispatch in the typical object-oriented programming context, our generic dispatch doesn't involve ideas like classes, instances, and inheritance. These weaken the separation of concerns by introducing spurious ontological commitments. + +A quite different strategy, to be explored in chapter 6, is to *layer* both data and procedures. This exploits the idea that data usually has associated metadata that can be processed alongside the data. For example, numerical data often has associated units. We will show how providing the flexibility of adding layers after the fact can enhance a program with new functionality, without any change to the original program. + +We can also build systems that combine multiple sources of *partial information* to obtain more complete answers. This is most powerful when the contributions come from independent sources of information. In chapter 4 we will see how type inference is really a matter of combining multiple sources of partial information. Locally deducible clues about the type of a value, for example that a numerical comparison requires numerical inputs and produces a + +boolean output, can be combined with other local type constraints to produce nonlocal type constraints. + +In chapter 7 we will see a different way to combine partial information. The distance to a nearby star can be estimated geometrically, by parallax: measuring the angle by which the star image shifts against the background sky as the Earth revolves around the Sun. The distance to the star can also be estimated by consideration of its brightness and its spectrum, using our understanding of stellar structure and evolution. Such estimates can be combined to get estimates that are more accurate than the individual contributions. + +A dual idea is the use of *degeneracy*: having multiple ways to compute something, which can be combined or modulated as needed. There are many valuable uses for degeneracy, including error detection, performance management, and intrusion detection. Importantly, degeneracy is also additive: each contributing part is self-contained and can produce a result by itself. One interesting use of degeneracy is to dynamically select from different implementations of an algorithm depending on context. This avoids the need to make assumptions about how the implementation will be used. + +Design and construction for flexibility has definite costs. A procedure that can take a greater variety of inputs than are necessary for solving the current problem will have more code than absolutely necessary and will take more thinking by the programmer than absolutely necessary. The same goes for generic dispatch, layering, and degeneracy, each of which involves constant overheads in memory space, compute time, and/or programmer time. But the principal cost of software is the time spent by programmers over the lifetime of the product, including maintenance and adaptations that are needed for changing requirements. Designs that minimize rewriting and refactoring reduce the overall costs to the incremental additions rather than complete rewrites. In other words, long-term costs are additive rather than multiplicative. + +# **1.1 Architecture of computation** + +A metaphor from architecture may be illuminating for the kind of system that we contemplate. After understanding the nature of the site to be built on and the requirements for the structure to be constructed, the design process starts with a *parti*: an organizing principle for the design. [3](#page-20-2) The *parti* is usually a sketch of the geometric arrangement of parts. The *parti* may also embody abstract ideas, such as the division into "served spaces" and "servant spaces," as in the work of Louis Isadore Kahn [130]. This decomposition is intended to divide the architectural problem into parts by separating out infrastructural support, such as the hallways, the restrooms, the mechanical rooms, and the elevators, from the spaces to be supported, such as the laboratories, classrooms, and offices in an academic building. + +The *parti* is a model, but it is usually not a completely workable structure. It must be elaborated with functional elements. How do we fit in the staircases and elevators? Where do the HVAC ducts, the plumbing, the electrical and communications distribution systems go? How will we run a road to accommodate the delivery patterns of service vehicles? These elaborations may cause modifications of the *parti*, but the *parti* continues to serve as a scaffold around which these elaborations are developed. + +In programming, the *parti* is the abstract plan for the computations to be performed. At small scale the *parti* may be an abstract algorithm and data-structure description. In larger systems it is an abstract composition of phases and parallel branches of a computation. In even larger systems it is an allocation of capabilities to logical (or even physical) locales. + +Traditionally, programmmers have not been able to design as architects. In very elaborate languages, such as Java, the *parti* is tightly mixed with the elaborations. The "served spaces," the expressions that actually describe the desired behavior, are horribly conflated with the "servant spaces," such as the type declarations, + +the class declarations, and the library imports and exports. [4](#page-20-3) More spare languages, such as Lisp or Python, leave almost no room for the servant spaces, and attempts to add declarations, even advisory ones, are shunned because they impede the beauty of the exposed *parti*. + +The architectural *parti* should be sufficiently complete to allow the creation of models that can be used for analysis and criticism. The skeleton plan of a program should be adequate for analysis and criticism, but it should also be executable, for experiment and for debugging. Just as an architect must fill in the *parti* to realize the structure being designed, a programmer must elaborate the plan to realize the computational system required. Layering (introduced in chapter 6) is one way to build systems that allow this kind of elaboration. + +# **1.2 Smart parts for flexibility** + +Large systems are composed of many smaller components, each of which contributes to the function of the whole either by directly providing a part of that function or by cooperating with other components to which it is interconnected in some pattern specified by the system architect to establish a required function. A central problem in system engineering is the establishment of interfaces that allow the interconnection of components so that the functions of those components can be combined to build compound functions. + +For relatively simple systems the system architect may make formal specifications for the various interfaces that must be satisfied by the implementers of the components to be interconnected. Indeed, the amazing success of electronics is based on the fact that it is feasible to make such specifications and to meet them. High-frequency analog equipment is interconnected with coaxial cable with standardized impedance characteristics, and with standardized families of connectors [4]. Both the function of a + +component and its interface behavior can usually be specified with only a few parameters [60]. In digital systems things are even clearer: there are static specifications of the meanings of signals (the digital abstraction); there are dynamic specifications of the timing of signals [126]; and there are mechanical specifications of the form factors of components. [5](#page-21-0) + +Unfortunately, this kind of a priori specification becomes progressively more difficult as the complexity of the system increases. We could specify that a chess-playing program plays a *legal* game— that it doesn't cheat—but how would one begin to specify that it plays a *good* game of chess? Our software systems are built with large numbers of custom-made highly specialized parts. The difficulty of specifying software components is exacerbated by the individualized nature of the components. + +By contrast, biology constructs systems of enormous complexity without very large specifications (considering the problem to be solved!). Every cell in our bodies is a descendant of a single zygote. All the cells have exactly the same genetic endowment (about 1 GByte of ROM!). However, there are skin cells, neurons, muscle cells, etc. The cells organize themselves to be discrete tissues, organs, and organ systems. Indeed, the 1 GByte of ROM specifies how to build the enormously complex machine (the human) from a huge number of failure-prone parts. It specifies how to operate those basic parts and how to configure them. It also specifies how to operate that compound machine reliably, over a great range of hostile conditions, for a very long life span, and how to defend that machine from others that would love to eat it! + +If our software components were simpler or more general they would have simpler specifications. If the components were able to adapt themselves to their surroundings, the precision of their specification would be less important. Biological systems exploit both of these strategies to build robust complex organisms. The difference is that the biological cells are dynamically configurable, and able to adapt themselves to their context. This is possible because the way a cell differentiates and specializes depends on its + +environment. Our software doesn't usually have this ability, and consequently we must adapt each part by hand. How could biology possibly work? + +Consider another example. We know that the various components of the brain are hooked together with enormous bundles of neurons, and there is nowhere near enough information in the genome to specify that interconnect in any detail. It is likely that the various parts of the brain learn to communicate with each other, based on the fact that they share important experiences. [6](#page-21-1) So the interfaces must be self-configuring, based on some rules of consistency, information from the environment, and extensive exploratory behavior. This is pretty expensive in boot-up time (it takes some years to configure a working human), but it provides a kind of robustness that is not found in our engineered entities to date. + +One idea is that biological systems use contextual signals that are informative rather than imperative. [7](#page-21-2) There is no master commander saying what each part must do; instead the parts choose their roles based on their surroundings. The behaviors of cells are not encoded in the signals; they are separately expressed in the genome. Combinations of signals just enable some behaviors and disable others. This weak linkage allows variation in the implementation of the behaviors that are enabled in various locales without modification of the mechanism that defines the locales. So systems organized in this way are evolvable in that they can accommodate adaptive variation in some locales without changing the behavior of subsystems in other locales. + +Traditionally, software systems are built around an imperative model, in which there is a hierarchy of control built into the structure. The individual pieces are assumed to be dumb actors that do what they are told. This makes adaptation very difficult, since all changes must be reflected in the entire control structure. In social systems, we are well aware of the problems with strict power structures and centralized command. But our software follows this flawed model. We can do better: making the parts smarter and + +individually responsible streamlines adaptation, since only those parts directly affected by a change need to respond. + +#### **Body plans** + +All vertebrates have essentially the same body plan, yet the variation in details is enormous. Indeed, all animals with bilateral symmetry share homeobox genes, such as the Hox complex. Such genes produce an approximate coordinate system in the developing animal, separating the developing animal into distinct locales. [8](#page-21-3) The locales provide context for a cell to differentiate. And information derived from contact with its neighbors produces more context that selects particular behaviors from the possible behaviors that are available in the cell's genetic program. [9](#page-21-4) Even the methods of construction are shared—the morphogenesis of ducted glands, and organs such as lungs and kidneys, is based on one embryological trick: the invagination of epithelium into mesenchyme automagically [10](#page-21-5) produces a branching maze of blind-end tubules surrounded by differentiating mesenchyme. [11](#page-21-6) + +Good engineering has a similar flavor, in that good designs are modular. Consider the design of a radio receiver. There are several grand "body plans" that have been discovered, such as direct conversion, TRF (tuned radio frequency), and superheterodyne. Each has a sequence of locales, defined by the engineering equivalent of a Hox complex, that patterns the system from the antenna to the output transducer. For example, a superheterodyne receiver ([figure](#page-10-0) 1.1) has a standard set of locales (from nose to tail). + +![](설계원칙-021-044_images/_page_10_Figure_0.jpeg) + +**[Figure](#page-9-0) 1.1** The superheterodyne plan, invented by Major Edwin Armstrong in 1918, is still the dominant "body plan" for radio receivers. + +The modules identified in this plan each decompose into yet other modules, such as oscillators, mixers, filters, and amplifiers, and so on down to the individual electronic components. Additionally, each module can be instantiated in many possible ways: the RF section may be just a filter, or it may be an elaborate filter and amplifier combination. Indeed, in an analog television receiver part of the output of the mixer is processed as AM by the video chain and another part is processed as FM to produce the audio. And some sections, such as the converter, may be recursively elaborated (as if parts of the Hox complex were duplicated!) to obtain multiple-conversion receivers. + +In biological systems this structure of compartments is also supported at higher levels of organization. There are tissues that are specialized to become boundaries of compartments, and tubes that interconnect them. Organs are bounded by such tissues and interconnected by such tubes, and the entire structure is packaged to fit into coeloms, which are cavities lined with specialized tissues in higher organisms. + +Similar techniques can be used in software. A body plan is just a wrapper that combines partially specified components. This is a kind of *combinator*: a thing that combines subparts together into a larger part. It is possible to create *combinator languages*, in which + +the components and the composite all have the same interface specification. In a combinator language, it is possible to build arbitrarily large composites from small numbers of mix-and-match components. The self-similar structures make combination easy. In chapter 2 we will begin to build combinator-based software, and this theme will run through all of the rest of the book. + +Something similar can be done with domain-specific languages. By making an abstraction of the domain, we can use the same domain-independent code in different domains. For example, numerical integrators are useful in any domain that has numerical aspects, regardless of the domain. Another example is pattern matching in chapter 4, which can be applied to a wide variety of domains. + +Biological mechanisms are universal in that each component can, in principle, act as any other component. Analog electronics components are not universal in that sense. They do not adapt themselves to their surroundings based on local signaling. But there are universal electrical building blocks (a programmable computer with analog interfaces, for example!). [12](#page-22-0) For low-frequency applications one can build analog systems from such blocks. If each block had all of the code required to be any block in the system, but was specialized by interactions with its neighbors, and if there were extra unspecialized "stem cells" in the package, then we could imagine building self-reconfiguring and self-repairing analog systems. But for now we still design and build these parts individually. + +In programming we do have the idea of a universal element: the *evaluator*. An evaluator takes a description of some computation to be performed and inputs to that computation. It produces the outputs that would arise if we passed the inputs to a bespoke component that implemented the desired computation. In computation we have a chance to pursue the powerfully flexible strategy of embryonic development. We will elaborate on the use of evaluator technology in chapter 5. + +# **1.3 Redundancy and degeneracy** + +Biological systems have evolved a great deal of robustness. One of the characteristics of biological systems is that they are redundant. Organs such as the liver and kidney are highly *redundant*: there is vastly more capacity than is necessary to do the job, so a person missing a kidney or part of a liver suffers no obvious incapacity. Biological systems are also highly *degenerate*: there are usually many ways to satisfy a given requirement. [13](#page-22-1) For example, if a finger is damaged, there are ways that the other fingers may be configured to pick up an object. We can obtain the necessary energy for life from a great variety of sources: we can metabolize carbohydrates, fats, and proteins, even though the mechanisms for digestion and for extraction of energy from each of these sources is quite distinct. + +The genetic code is itself degenerate, in that the map from codons (triples of nucleotides) to amino acids is not one-to-one: there are 64 possible codons to specify only about 20 possible amino acids [86, 54]. As a consequence, many point mutations (changes of a single nucleotide) do not change the protein specified by a coding region. Also, quite often the substitution of one amino acid with a similar one does not impair the biological activity of a protein. These degeneracies provide ways that variation can accumulate without obvious phenotypic consequences. Furthermore, if a gene is duplicated (not an uncommon occurrence), the copies may diverge silently, allowing the development of variants that may become valuable in the future, without interfering with current viability. In addition, the copies can be placed under different transcriptional controls. + +Degeneracy is a product of evolution, and it certainly enables evolution. Probably degeneracy is itself selected for, because only creatures that have significant amounts of degeneracy are sufficiently adaptable to allow survival as the environment changes. [14](#page-22-2) For example, suppose we have some creature (or engineered system) that is degenerate in that there are several very + +different independent mechanisms to achieve some essential function. If the environment changes (or the requirements change) so that one of the ways of achieving an essential function becomes untenable, the creature will continue to live and reproduce (the system will continue to satisfy its specifications). But the subsystem that has become inoperative is now open to mutation (or repair), without impinging on the viability (or current operation) of the system as a whole. + +The theoretical structure of physics is deeply degenerate. For example, problems in classical mechanics can be approached in multiple ways. There is the Newtonian formulation of vectoral mechanics and the Lagrangian and Hamiltonian formulations of variational mechanics. If both vectoral mechanics and either form of variational mechanics are applicable, they produce equivalent equations of motion. For analysis of systems with dissipative forces like friction, vectoral mechanics is effective; variational methods are not well suited for that kind of system. Lagrangian mechanics is far better than vectoral mechanics for dealing with systems with rigid constraints, and Hamiltonian mechanics provides the power of canonical transformations to help understand systems using the structure of phase space. Both the Lagrangian and Hamiltonian formulations help us with deep insights into the role of symmetries and conserved quantities. The fact that there are three overlapping ways of describing a mechanical system, which agree when they are all applicable, gives us multiple avenues of attack on any problem [121]. + +Engineered systems may incorporate some redundancy, in critical systems where the cost of failure is extreme. But they almost never intentionally incorporate degeneracy of the kind found in biological systems, except as a side effect of designs that are not optimal. [15](#page-22-3) + +Degeneracy can add value to our systems: as with redundancy, we can cross-check the answers of degenerate computations to improve robustness. But degenerate computations are not just redundant but *different* from one another, meaning that a bug in one is + +unlikely to affect the others. This is a positive characteristic not only for reliability but also for security, as a successful attack must compromise multiple degenerate parts. + +When degenerate parts generate partial information, the result of their combination can be better than any individual result. Some navigation systems use this idea to combine several positional estimates to generate a highly accurate result. We will explore the idea of combining partial information in chapter 7. + +# **1.4 Exploratory behavior** + +One of the most powerful mechanisms of robustness in biological systems is exploratory behavior. [16](#page-22-4) The idea is that the desired outcome is produced by a [generate-and-test](#page-14-0) mechanism (see figure 1.2). This organization allows the generator mechanism to be general and to work independently of the testing mechanism that accepts or rejects a particular generated result. + +![](설계원칙-021-044_images/_page_14_Figure_4.jpeg) + +**[Figure](#page-14-1) 1.2** Exploratory behavior can be accomplished in two ways. In one way a generator proposes an action (or a result), which may be explicitly rejected by a tester. The generator then must propose an alternative. Another way is that the generator produces all of the alternatives, without feedback, and a filter selects one or more that are acceptable. + +For example, an important component of the rigid skeleton that supports the shape of a cell is an array of microtubules. Each microtubule is made up of protein units that aggregate to form it. Microtubules are continually created and destroyed in a living cell; they are created growing out in all directions. However, only microtubules that encounter a kinetochore or other stabilizer in the cell membrane are stable, thus supporting the shape determined by the positions of the stabilizers [71]. So the mechanism for growing and maintaining a shape is relatively independent of the mechanism for specifying the shape. This mechanism partly determines the shapes of many types of cells in a complex organism, and it is almost universal in animals. + +Exploratory behavior appears at all levels of detail in biological systems. The nervous system of a growing embryo produces a vastly larger number of neurons than will persist in the adult. Those neurons that find appropriate targets in other neurons, sensory organs, or muscles will survive, and those that find no targets kill themselves. The hand is fashioned by production of a pad and deletion, by apoptosis (programmed cell death), of the material between the fingers [131]. Our bones are continually being remodeled by osteoblasts (which build bone) and osteoclasts (which destroy bone). The shape and size of the bones is determined by constraints determined by their environment: the parts that they must be associated with, such as muscles, ligaments, tendons, and other bones. + +Because the generator need not know about how the tester accepts or rejects its proposals, and the tester need not know how the generator makes its proposals, the two parts can be independently developed. This makes adaptation and evolution more efficient, because a mutation to one or the other of these two subsystems need not be accompanied by a complementary mutation to the other. However, this isolation can be expensive because of the wasted effort of generation and rejection of failed proposals. [17](#page-22-5) + +Indeed, generate and test is a metaphor for all of evolution. The mechanisms of biological variation are random mutations: + +modifications of the genetic instructions. Most mutations are neutral in that they do not directly affect fitness because of degeneracy in the systems. Natural selection is the test phase. It does not depend on the method of variation, and the method of variation does not anticipate the effect of selection. + +There are even more striking phenomena: even in closely related creatures some components that end up almost identical in the adult are constructed by entirely different mechanisms in the embryo. [18](#page-22-6) For distant relationships, divergent mechanisms for constructing common structures may be attributed to "convergent evolution," but for close relatives it is more likely evidence for separation of levels of detail, in which the result is specified in a way that is somewhat independent of the way it is accomplished. + +Engineered systems may show similar structure. We try to separate specification from implementation: there are often multiple ways to satisfy a specification, and designs may choose different implementations. The best method to use to sort a data set depends on the expected size of the data set, as well as the computational cost of comparing elements. The appropriate representation of a polynomial depends on whether it is sparse or dense. But if choices like these are made dynamically (an unusual system) they are deterministic: we do not see many systems that simultaneously try several ways to solve a problem and use the one that converges first (what are all those cores for, anyway?). It is even rare to find systems that try multiple methods sequentially: if one method fails try another. We will examine use of backtracking to implement generate-and-test mechanisms in pattern matching in chapter 4. We will learn how to build automatic backtracking into languages in chapter 5. And we will learn how to build a dependency-directed backtracking mechanism that extracts as much information as possible from failures in chapter 7. + +# **1.5 The cost of flexibility** + +Lisp programmers know the value of everything but the cost of nothing. Alan Perlis paraphrasing Oscar Wilde + +We have noted that generality and evolvability are enhanced in systems that use generics, layers, redundancy, degeneracy, and exploratory behavior. Each of these is expensive, when looked at in isolation. A mechanism that works over a wide range of inputs must do more to get the same result than a mechanism specialized to a particular input. A redundant mechanism has more parts than an equivalent nonredundant mechanism. A degenerate mechanism appears even more extravagant. And a mechanism that explores by generate-and-test methods can easily get into an infeasible exponential search. Yet these are key ingredients in evolvable systems. Perhaps to make truly robust systems we must be willing to pay for what appears to be a rather elaborate and expensive infrastructure. + +Part of the problem is that we are thinking about cost in the wrong terms. Use of time and space matters, but our intuition about where those costs come from is poor. Every engineer knows that evaluating the real performance of a system involves extensive and careful measurements that often show that the cost is in surprising places. As complexity increases, this will only get harder. But we persist in doing premature optimization at all levels of our programs without knowing its real value. + +Suppose we separate the parts of a system that have to be fast from the parts that have to be smart. Under this policy, the cost of generality and evolvability can be confined to the parts that have to be smart. This is an unusual perspective in computing systems, yet it is ubiquitous in our life experience. When we try to learn a new skill, for example to play a musical instrument, the initial stages involve conscious activity to connect the intended effect to the physical movements required to produce it. But as the skill is mastered, most of the work is done without conscious attention. + +This is essential to being able to play at speed, because the conscious activity is too slow. + +A similar argument is found in the distinction between hardware and software. Hardware is designed for efficiency, at the cost of having a fixed interface. One can then build software on top of that interface—in effect creating a virtual machine—using software. That extra layer of abstraction incurs a well-known cost, but the tradeoff is well worth the generality that is gained. (Otherwise we'd still be programming in assembly language!) The point here is that this layered structure provides a way to have both efficiency and flexibility. We believe that requiring an entire system to be implemented in the most efficient possible way is counterproductive, preventing the flexibility for adapting to future needs. The real cost of a system is the time spent by programmers in designing, understanding, maintaining, modifying, and debugging the system. So the value of enhanced adaptability may be even more extreme. A system that is easily adapted and maintained eliminates one of the largest costs: teaching new programmers how the existing system works, in all its gory detail, so that they know where to reach in and modify the code. Indeed, the cost of our brittle infrastructure probably greatly exceeds the cost of flexible design, both in the cost of disasters and in the lost opportunity costs due to the time of redesign and rebuilding. And if a significant fraction of the time spent reprogramming a system for a new requirement is replaced by having that system adapt itself to the new situation, that can be an even bigger win. + +### **The problem with correctness** + +To the optimist, the glass is half full. To the pessimist, the glass is half empty. To the engineer, the glass is twice as big as it needs to be. + +author unknown + +But there may be an even bigger cost to building systems in a way that gives them a range of applicability greater than the set of situations that we have considered at design time. Because we intend to be willing to apply our systems in contexts for which they were not designed, we cannot be sure that they work correctly! + +In computer science we are taught that the "correctness" of software is paramount, and that correctness is to be achieved by establishing formal specification of components and systems of components and by providing proofs that the specifications of a combination of components are met by the specifications of the components and the pattern by which they are combined. [19](#page-23-0) We assert that this discipline makes systems more brittle. In fact, to make truly robust systems we must discard such a tight discipline. + +The problem with requiring proofs is that it is usually harder to prove general properties of general mechanisms than it is to prove special properties of special mechanisms used in constrained circumstances. This encourages us to make our parts and combinations as special as possible so we can simplify our proofs. But the combination of tightly specialized parts is brittle—there is no room for variation! [20](#page-23-1) + +We are not arguing against proofs. They are wonderful when available. Indeed, they are essential for critical system components, such as garbage collectors (or ribosomes). [21](#page-23-2) However, even for safety-critical systems, such as autopilots, the restriction of applicability to situations for which the system is provably correct as specified may actually contribute to unnecessary failure. Indeed, we want an autopilot to make a good-faith attempt to safely fly an airplane that is damaged in a way not anticipated by the designer! + +We are arguing against the discipline of *requiring* proofs: the requirement that everything must be proved to be applicable in a situation before it is allowed to be used in that situation excessively inhibits the use of techniques that could enhance the robustness of designs. This is especially true of techniques that allow a method to be used, on a tight leash, outside of its proven domain, and + +techniques that provide for future expansion without putting limits on the ways things can be extended. + +Unfortunately, many of the techniques we advocate make the problem of proof much more difficult, if not practically impossible. On the other hand, sometimes the best way to attack a problem is to generalize it until the proof becomes simple. + +- [1](#page-0-0) The discovery of the existence of universal machines by Alan Turing [124], and the fact that the set of functions that can be computed by Turing machines is equivalent to both the set of functions representable in Alonzo Church's *λ* calculus [17, 18, 16] and the general recursive functions of Kurt Gödel [45] and Jacques Herbrand [55], ranks among the greatest intellectual achievements of the twentieth century. +- [2](#page-0-1) Of course, there are some wonderful exceptions. For example, Emacs [113] is an extensible editor that has evolved gracefully to adapt to changes in the computing environment and to changes in its users' expectations. The computing world is just beginning to explore "engineered frameworks," for example, Microsoft's .net and Sun's Java. These are intended to be infrastructures to support evolvable systems. +- [3](#page-5-0) A *parti* (pronounced parTEE) is the central idea of an architectural work: it is "the [architectural] composition being conceived as a whole, with the detail being filled in later." [62] +- [4](#page-6-0) Java *does* support interfaces, which could be considered a kind of *parti*, in that they are an abstract representation of the program. But a *parti* combines both abstract and concrete components, while a Java interface is wholly abstract. Not to mention that over-use of interfaces is considered a "code smell" by many programmers. + +- [5](#page-7-0) *The TTL Data Book for Design Engineers* [123] is a classic example of a successful set of specifications for digital-system components. TTL specifies several internally consistent "families" of small-scale and medium-scale integrated-circuit components. The families differ in such characteristics as speed and power dissipation, but not in function. The specification describes the static and dynamic characteristics of each family, the functions available in each family, and the physical packaging for the components. The families are cross-consistent as well as internally consistent in that each function is available in each family, with the same packaging and a consistent nomenclature for description. Thus a designer may design a compound function and later choose the family for implementation. Every good engineer (and biologist!) should be familiar with the lessons of TTL. +- [6](#page-8-0) An elementary version of this self-configuring behavior has been demonstrated by Jacob Beal in his S.M. thesis [9]. +- [7](#page-8-1) Kirschner and Gerhart examine this [70]. +- [8](#page-9-1) This is a very vague description of a complex process involving gradients of morphogens. We do not intend to get more precise here, as this is not about biology, but rather about how biology can inform engineering. +- [9](#page-9-2) We have investigated some of the programming issues involved in this kind of development in our Amorphous Computing project [2]. +- [10](#page-9-3) Automagically: "Automatically, but in a way which, for some reason (typically because it is too complicated, or too ugly, or perhaps even too trivial), the speaker doesn't feel like explaining." From *The Hacker's Dictionary* [117, 101] +- [11](#page-9-4) One well-studied example of this kind of mechanism is the formation of the submandibular gland of the mouse. See, for + +- example, the treatment in [11] or the summary in [7] section 3.4.3. +- [12](#page-11-0) Piotr Mitros has developed a novel design strategy for building analog circuits from potentially universal building blocks. See [92]. +- [13](#page-12-0) Although clear in extreme cases, the distinction biologists make between redundancy and degeneracy is fuzzy at the boundary. For more information see [32]. +- [14](#page-12-1) Some computer scientists have used simulation to investigate the evolution of evolvability [3]. +- [15](#page-13-0) Indeed, one often hears arguments against building degeneracy into an engineered system. For example, in the philosophy of the computer language Python it is claimed: "There should be one and preferably only one—obvious way to do it." [95] +- [16](#page-14-2) This thesis is nicely explored in the book of Kirschner and Gerhart [70]. +- [17](#page-15-0) This expense can be greatly reduced if there is sufficient information present to quickly reduce the number of candidates that must be tested. We will examine a very nice example of this optimization in chapter 7. +- [18](#page-16-0) The cornea of a chick and the cornea of a mouse are almost identical, but the morphogenesis of these two are not at all similar: the order of the morphogenetic events is not even the same. Bard [7] section 3.6.1 reports that having divergent methods of forming the same structures in different species is common. He quotes a number of examples. One spectacular case is that the frog *Gastrotheca riobambae* (see del Pino and Elinson [28]) develops ordinary frog morphology from an embryonic disk, whereas other frogs develop from an approximately spherical embryo. + +- [19](#page-19-0) It is hard, and perhaps impossible, to specify a complex system. As noted on page 7, it is easy to specify that a chess player must play legal chess, but how would we specify that it plays well? And unlike chess, whose rules do not change, the specifications of most systems are dynamically changing as the conditions of their usage change. How do we specify an accounting system in the light of rapidly changing tax codes? +- [20](#page-19-1) Indeed, Postel's Law (on page 3) is directly in opposition to the practice of building systems from precisely and narrowly specified parts: Postel's law instructs us to make each part more generally applicable than absolutely necessary for any particular application. +- [21](#page-19-2) A subtle bug in a primitive storage management subsystem, like a garbage collector, is extremely difficult to debug—especially in a system with concurrent processes! But if we keep such subsystems simple and small they can be specified and even proved "correct" with a tractable amount of work. \ No newline at end of file diff --git a/raw/book/설계원칙-021-044_images/_page_10_Figure_0.jpeg b/raw/book/설계원칙-021-044_images/_page_10_Figure_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..28b79831175e3daa1d407dec51fdf21afcf88bfc GIT binary patch literal 41306 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 W{{Qd)3Ea~^xoiJwV=DG-`hNhyBnCqO literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-021-044_images/_page_14_Figure_4.jpeg b/raw/book/설계원칙-021-044_images/_page_14_Figure_4.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2547f1cee2dff66deb6bd0dfd65cc00f42aa902a GIT binary patch literal 27473 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 DIj61Y literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099.md b/raw/book/설계원칙-045-099.md new file mode 100644 index 0000000..8e59eda --- /dev/null +++ b/raw/book/설계원칙-045-099.md @@ -0,0 +1,1429 @@ +# **Domain-Specific Languages** + +One powerful strategy for building flexibility into a programming project is to create a *domain-specific language* that captures the conceptual structure of the subject matter of the programs to be developed. A domain-specific language is an abstraction in which the nouns and verbs of the language are directly related to the problem domain. Such a language allows an application program to be written directly in terms of the domain. By its nature, a domainspecific language implements a fairly complete model of the domain, in excess of what is needed for a particular application. [1](#page-53-0) Although this may seem like extra work that is not essential to the particular problem at hand, it is often less work than writing a monolithic program, and the resulting program is much easier to modify, debug, and extend. + +So a domain-specific language layer is built to support more than just the development of a particular program. It provides a general framework for the construction of a variety of related programs that share the domain of discourse. It simplifies the process of extending an existing application in that domain. And it provides a substrate that allows related applications to cooperate. + +In this chapter we first introduce systems of combinators, a powerful organizational strategy for the erection of domain-specific language layers. We will demonstrate the effectiveness of this strategy by showing how to reformulate the ugly mess of regular expressions for string matching into a pretty combinator-based domain-specific language embedded in Scheme. But sometimes we have components that do not easily fit into a clean systemsometimes we need a system of adapters. We illustrate this with a domain-specific language for making unit-conversion wrappers for procedures, allowing procedures written assuming one unit system to be used with a different unit system. Finally, we consider the broad domain of board games. We see how it is possible to abstract the details of the domain by building an interpreter for the rules of the game. + +## **2.1 Combinators** + +Biological systems achieve much of their adaptability through the use of very general parts (cells) that are dynamically configured and consequently able to adjust as their environment changes. Computational systems usually do not use this strategy, instead relying on a hierarchy of custom parts and combinations. In recent years, large libraries of well-specified higher-level parts have raised the abstraction level of this activity. But the means of combination are rarely abstracted or shared, other than as "patterns." [2](#page-53-1) + +In some situations we can improve on this practice by simple strategies that promote the use of shared combination mechanisms. If the systems we build are made up from members of a family of "mix-and-match" components that combine to make new members of the family, perturbations of the requirements can sometimes be addressed by rearrangement of components. + +A *system of combinators* is a set of primitive parts and a set of means of combining parts such that the interface specifications of the combinations are the same as those of the primitives. This enables construction without accidental interactions between the parts. A classic example of a combinator-like system is TTL [123], which is a historic library of standard parts and combinations for building complex digital systems. + +Combinator systems provide a design strategy for domainspecific languages. The elements of the system are words in the language, and the combinators are used to combine them into + +phrases. Combinator systems have the significant advantage that they are easy to build and to reason about, but they have limitations, which we will discuss in section 3.1.5. When they fit the domain, they are an excellent strategic choice. + +But how do we arrange to build our systems by combining elements of a family of mix-and-match components? We must identify a set of primitive components and a set of *combinators* that combine components so as to make compound components with the same interface as the primitive components. Such sets of combinators are sometimes explicit, but more often implicit, in mathematical notation. + +### **2.1.1 Function combinators** + +The use of functional notation in mathematics is a combinator discipline. A function has a domain, from which its arguments are selected, and a range (or codomain) of its possible values. There are combinators that produce new functions as combinations of others. For example, the composition *f ○ g* of functions *f* and *g* is a new function that takes arguments in the domain of *g* and produces values in the codomain of *f*. If two functions have the same domain and codomain, and if arithmetic is defined on their common codomain, then we can define the sum (or product) of the functions as the function that when given an argument in their common domain, is the sum (or product) of the values of the two functions at that argument. Languages that allow first-class procedures provide a mechanism to support this means of combination, but what really matters is a good family of pieces. + +Organizing a system around combinators has several advantages. The parts that are made can be arbitrarily mixed and matched. Any combination yields a legal program, whose behavior transparently depends only on the behaviors of the parts and the ways that they are combined. The context in which a part appears does not change the behavior of the part: it is always acceptable to pick up a compound part to use it in a new context, without worry about its behavior in that context. Thus such programs are easy to write, easy + +to read, and easy to verify. A program built on combinators is extensible, because introduction of new parts or new combinators does not affect the behavior of existing programs. + +We can think of function combinators as implementing wiring diagrams that specify how a function is built by combining its parts. For example, functional composition represents a box made of two subboxes so that the output of the first feeds the input of the second, as shown in [figure](#page-3-0) 2.1. A program that implements this idea is straightforward: + +``` +(define (compose f g) + (lambda args + (f (apply g args)))) +``` + +![](설계원칙-045-099_images/_page_3_Picture_3.jpeg) + +**[Figure](#page-3-1) 2.1** The composition *f ◦ g* of functions *f* and *g* is a new function that is defined by this "wiring diagram." The input to *f ◦ g* is given to *g*. The output of *g* is then passed to *f* , and it produces the output of *f ◦ g*. + +(It gets more exciting if we want to check that the arities match: that the function represented by procedure f takes only one argument, to match the output of g. It gets even more fun if g can return multiple values and f must take those arguments. We may also want to check that the arguments passed to the composition are the right number for g. But these are fine points that we will deal with later.) + +We can demonstrate composition with a simple example: + +``` +((compose (lambda (x) (list 'foo x)) + (lambda (x) (list 'bar x))) +``` + +``` +'z) +(foo (bar z)) +``` + +It is sometimes nicer to name the procedure that is being returned by a combinator. For example, we could write compose as + +``` +(define (compose f g) + (define (the-composition . args) + (f (apply g args))) + the-composition) +``` + +The name the-composition is not defined outside of the scope of the definition of compose, so there is no obvious advantage to this way of writing the compose procedure. We often use anonymous procedures defined by lambda expressions in our programs, as in the first version of compose above. So the choice of how to write the program is mostly a matter of style. [3](#page-53-2) + +Even with just this compose combinator we can write some rather elegant code. Consider the problem of computing the *n*th iterate of a function *f*(*x*) = *f*(*f *1(*x*)). We can write this elegantly as a program: + +``` +(define ((iterate n) f) + (if (= n 0) + identity + (compose f ((iterate (- n 1)) f)))) +(define (identity x) x) +``` + +The result of ((iterate n) f) is a new function, of the same type as f. It can be used wherever f can be used. So (iterate n) is itself a function combinator. Now we can use this to determine the result of repeatedly squaring a number: + +``` +(((iterate 3) square) 5) +390625 +``` + +Notice the analogy: function composition is like multiplication, so function iteration is like exponentiation. + +There are many simple combinators that are generally useful in programming. We will present just a few here to give a feeling for + +the range of possibilities. + +We can arrange to use two functions in parallel, then combine their results with a specified combiner function (see [figure](#page-5-0) 2.2). This parallel combination is implemented with the procedure + +![](설계원칙-045-099_images/_page_5_Picture_2.jpeg) + +**[Figure](#page-5-1) 2.2** In parallel-combine the functions *f* and *g* take the same number of arguments. The input to the "parallel combination" is passed to both of them. Their outputs are then combined by the function *h*, of two arguments. + +``` +(define (parallel-combine h f g) + (define (the-combination . args) + (h (apply f args) (apply g args))) + the-combination) +((parallel-combine list + (lambda (x y z) (list 'foo x y z)) + (lambda (u v w) (list 'bar u v w))) + 'a 'b 'c) +((foo a b c) (bar a b c)) +``` + +The parallel-combine combinator can be useful in organizing a complex process. For example, suppose we have a source of images of pieces of vegetable. We may have one procedure that given the image can estimate the color of the vegetable, and another that can + +give a description of the shape (leaf, root, stalk, ...). We may have a third procedure that can combine these descriptions to identify the vegetable. These can be neatly composed with parallel-combine. + +### **Arity** + +There are entire families of combinators that we can use in programming that we don't normally think of. Many of these appear in common mathematical contexts. For example, tensors are an extension of linear algebra to linear operators with multiple arguments. But the idea is more general than that: the "tensor combination" of two procedures is just a new procedure that takes a data structure combining arguments for the two procedures. It distributes those arguments to the two procedures, producing a data structure that combines the values of the two procedures. The need to unbundle a data structure, operate on the parts separately, and rebundle the results is ubiquitous in programming. The wiring diagram in [figure](#page-7-0) 2.3 shows spread-combine. It is a generalization of the tensor product in multilinear algebra. In the mathematical tensor product, *f* and *g* are linear functions of their inputs, and *h* is a trace over some shared indices; but tensors are just the special case that inspired this combinator. + +![](설계원칙-045-099_images/_page_7_Picture_0.jpeg) + +**[Figure](#page-6-0) 2.3** In spread-combine the *n* +*m* arguments are split between the functions *f* and *g*. The first *n* arguments go to *f* and the *m* other arguments go to *g*. The resulting outputs are then combined by the function *h*, of two arguments. + +The program to implement spread-combine is a bit more complicated than parallel-combine, because it must distribute the correct arguments to f and g. Here is a first draft of that code: + +``` +(define (spread-combine h f g) + (let ((n (get-arity f))) + (define (the-combination . args) + (h (apply f (list-head args n)) + (apply g (list-tail args n)))) + the-combination)) +``` + +This code requires a way of determining how many arguments a procedure takes (its *arity*), because it has to pick out the arguments for f and then pass the rest to g. + +This version of spread-combine is not very good. The most egregious problem is that the-combination takes any number of arguments, so it does not have a well-defined numerical arity, and thus it cannot be passed to another combinator that needs its arity. For example, the result of a spread-combine cannot be passed as the second argument f to another spread-combine. So, somehow, + +we have to decorate the-combination with an appropriate arity. Here is a second draft: + +``` +(define (spread-combine h f g) + (let ((n (get-arity f)) (m (get-arity g))) + (let ((t (+ n m))) + (define (the-combination . args) + (h (apply f (list-head args n)) + (apply g (list-tail args n)))) + (restrict-arity the-combination t)))) +``` + +Here, the procedure the-combination that is returned has its arity specified, so it can be the input to some other combinator that requires an arity. The restrict-arity procedure takes a procedure, annotates it so that its arity can be obtained by getarity, and returns the annotated procedure. + +This is pretty good, but the best programs are written by paranoids! We want to catch errors as early as possible, before they become hard to locate or cause serious trouble. So let's annotate this code with an *assertion* in *Paranoid Programming Style*, to check that we have the right number of arguments to our combination. + +``` +(define (spread-combine h f g) + (let ((n (get-arity f)) (m (get-arity g))) + (let ((t (+ n m))) + (define (the-combination . args) + (assert (= (length args) t)) + (h (apply f (list-head args n)) + (apply g (list-tail args n)))) + (restrict-arity the-combination t)))) +((spread-combine list + (lambda (x y) (list 'foo x y)) + (lambda (u v w) (list 'bar u v w))) + 'a 'b 'c 'd 'e) +((foo a b) (bar c d e)) +``` + +The special form assert is just a convenient way to signal an error if its argument does not have a true value. + +One way to write restrict-arity and get-arity is as follows: + +``` +(define (restrict-arity proc nargs) + (hash-table-set! arity-table proc nargs) + proc) +(define (get-arity proc) + (or (hash-table-ref/default arity-table proc #f) + (let ((a (procedure-arity proc))) ;arity not in table + (assert (eqv? (procedure-arity-min a) + (procedure-arity-max a))) + (procedure-arity-min a)))) +(define arity-table (make-key-weak-eqv-hash-table)) +``` + +Here we are using a hash table to attach a "sticky note" to the procedure. [4](#page-53-3) This is a simple trick for adding information to an existing object, but it depends on the uniqueness of the object being annotated, so it should be used carefully. + +If the procedure get-arity is unable to find an explicit value in arity-table, it computes one using primitives from the underlying MIT/GNU Scheme system. This involves some hair, because those primitives support a more general idea of arity: that a procedure requires a minimum number of arguments, and may have an optional maximum number of arguments. Our arity code expects an arity to be a fixed number of arguments, and so get-arity cannot work with any other kind of procedure. Unfortunately, this excludes procedures like + that take any number of arguments. Changing the arity code to use a more general notion of arity would complicate it, and our goal here is to have a clear exposition rather than a general solution (see exercise 2.2). + +# **Exercise 2.1: Arity repair** + +The procedures compose and parallel-combine that we have introduced do not obey the requirement that they advertise the arity of the combination. Thus they would not be good citizens of our family of combinators. Fix the implementations of compose and parallel-combine shown above, so that + +- they check their components to make sure that the arities are compatible; +- the combination they construct checks that it is given the correct number of arguments when it is called; +- the combination advertises its arity correctly for get-arity. + +# **Exercise 2.2: Arity extension** + +Our exposition of useful combinators is flawed in that the arity mechanism we displayed cannot handle the more general arity mechanism used by MIT/GNU Scheme. For example, the addition procedure, which is the value of +, can take any number of arguments: + +``` +(procedure-arity-min (procedure-arity +)) = 0 +(procedure-arity-max (procedure-arity +)) = #f +``` + +and the arctangent procedure can take either 1 or 2 arguments: + +``` +(procedure-arity-min (procedure-arity atan)) = 1 +(procedure-arity-max (procedure-arity atan)) = 2 +``` + +It is useful to extend the handling of arities so that combinators can work with these more complex situations. + +- **a.** Sketch a plan for how to extend the combinators to use the more general arities. Note that you may not always be able to use arithmetic on the arities. What choices will you have to make in reformulating spread-combine? For example, what kinds of restrictions will be needed on the procedures f, g, and h in spread-combine? +- **b.** Apply your plan and make it all work! + +For any language there are primitives, means of combination, and means of abstraction. A *combinator language* defines primitives and means of combination, inheriting its means of + +abstraction from the underlying programming language. In our example, the primitives are functions, and the means of combination are the combinators compose, parallel-combine, spread-combine, and others we may introduce. + +### **Multiple values** + +Notice that parallel-combine and spread-combine are similar in that each is the application of a combiner h to the results of f and g. But we did not use compose to construct these combinators. To abstract this pattern we need to be able to return multiple values from the combination of f and g and then use those multiple values as arguments for h. We could do this by returning a compound data structure, but a better way is to use the Scheme multiple-value return mechanism. Given multiple values we can define spreadcombine as a composition of two parts, h and this combination of f and g: [5](#page-53-4) + +``` +(define (spread-apply f g) + (let ((n (get-arity f)) (m (get-arity g))) + (let ((t (+ n m))) + (define (the-combination . args) + (assert (= (length args) t)) + (values (apply f (list-head args n)) + (apply g (list-tail args n)))) + (restrict-arity the-combination t)))) +``` + +![](설계원칙-045-099_images/_page_12_Figure_0.jpeg) + +**[Figure](#page-12-0) 2.4** The combinator spread-combine is really a composition of two parts. The first part, spread-apply, is the combination of the functions *f* and *g* with the correct arguments routed to them. The second part is the combiner *h*, which is just composed with the first part. This decomposition is enabled by use of the multiple-values mechanism of Scheme. + +The Scheme procedure values returns the results of applying both f and g. [6](#page-53-5) + +Below we will generalize compose so that we can directly implement the abstraction shown in [figure](#page-12-1) 2.4 as follows: + +``` +(define (spread-combine h f g) + (compose h (spread-apply f g))) +``` + +This has the same behavior as our original version: + +``` +((spread-combine list + (lambda (x y) (list 'foo x y)) + (lambda (u v w) (list 'bar u v w))) + 'a 'b 'c 'd 'e) +((foo a b) (bar c d e)) +``` + +To make this work, we generalize compose to allow multiple values to pass between the composed procedures: + +``` +(define (compose f g) + (define (the-composition . args) + (call-with-values (lambda () (apply g args)) +``` + +``` +f)) +(restrict-arity the-composition (get-arity g))) +``` + +Here the second argument to compose returns two values: + +``` +((compose (lambda (a b) + (list 'foo a b)) + (lambda (x) + (values (list 'bar x) + (list 'baz x)))) + 'z) +(foo (bar z) (baz z)) +``` + +Now we can generalize even further. We can allow all of the functions we are combining to return multiple values. If f and g both return multiple values we can combine those values into multiple values that the-combination can return: + +``` +(define (spread-apply f g) + (let ((n (get-arity f)) (m (get-arity g))) + (let ((t (+ n m))) + (define (the-combination . args) + (assert (= (length args) t)) + (let-values ((fv (apply f (list-head args n))) + (gv (apply g (list-tail args n)))) + (apply values (append fv gv)))) + (restrict-arity the-combination t)))) +((spread-combine list + (lambda (x y) (values x y)) + (lambda (u v w) (values w v u))) + 'a 'b 'c 'd 'e) +(a b e d c) +``` + +The only restriction is that the total number of values returned must be appropriate for the arity of h. + +# **Exercise 2.3: A quickie** + +Reformulate parallel-combine to be a composition of two parts and to allow the parts to return multiple values. + +### **A small library** + +Many common patterns of usage can be captured as combinators, and very pretty programs are often constructed using such techniques. It is to our advantage to expose and abstract such common patterns. Here are a few more to think about. + +Often we have an interface that is more general than necessary in a particular situation. In such a case we may want to preserve the interface, but call some more specialized procedure that does not need all of the parameters we can supply in the general case; so we choose to make a version of our specialized procedure that ignores some arguments. + +The procedure discard-argument takes the index, i, of the argument to be discarded and returns a combinator. The combinator takes a function, f, of *n* arguments and returns a new function thecombination of *n* + 1 arguments that applies f to the *n* arguments resulting from deleting the *i*th argument from the *n* + 1 given arguments. [Figure](#page-14-0) 2.5 illustrates this idea. The code for this combinator is: + +![](설계원칙-045-099_images/_page_14_Picture_4.jpeg) + +**[Figure](#page-14-1) 2.5** The combinator (discard-argument 2) takes a three-argument function *f* and makes a new function of four arguments that ignores its third argument (i=2) and passes the remaining arguments to *f*. + +``` +(define (discard-argument i) + (assert (exact-nonnegative-integer? i)) + (lambda (f) + (let ((m (+ (get-arity f) 1))) + (define (the-combination . args) +``` + +``` +(assert (= (length args) m)) + (apply f (list-remove args i))) + (assert (< i m)) + (restrict-arity the-combination m)))) +(define (list-remove lst index) + (let lp ((lst lst) (index index)) + (if (= index 0) + (cdr lst) + (cons (car lst) (lp (cdr lst) (- index 1)))))) +(((discard-argument 2) + (lambda (x y z) (list 'foo x y z))) + 'a 'b 'c 'd) +(foo a b d) +``` + +One can generalize this combinator to discard multiple arguments. The opposite of the situation of discard-argument also commonly occurs. In [figure](#page-15-0) 2.6 we see a wiring diagram for specializing a procedure by specifying all but one argument in advance, leaving one to be passed in the call. This is traditionally called *currying* in honor of the logician Haskell Curry, who was an early investigator of combinatory logic. [7](#page-53-6) + +![](설계원칙-045-099_images/_page_15_Picture_2.jpeg) + +**[Figure](#page-15-1) 2.6** The combinator ((curry-argument 2) 'a 'b 'c) specifies three of the arguments to the four-argument function *f* , leaving the third argument (i=2) to be supplied in the call to the resulting one-argument function. + +The code for curry-argument poses no surprises: + +``` +(define ((curry-argument i) . args) + (lambda (f) + (assert (= (length args) (- (get-arity f) 1))) +``` + +``` +(lambda (x) + (apply f (list-insert args i x))))) +(define (list-insert lst index value) + (let lp ((lst lst) (index index)) + (if (= index 0) + (cons value lst) + (cons (car lst) (lp (cdr lst) (- index 1)))))) +((((curry-argument 2) 'a 'b 'c) + (lambda (x y z w) (list 'foo x y z w))) + 'd) +(foo a b d c) +``` + +Note that here we do not need to use restrict-arity because the returned procedure has exactly one argument. [8](#page-53-7) In exercise 2.5 we generalize this combinator for currying, to leave multiple arguments to be supplied. + +Sometimes we want to use a library procedure that has a different order of arguments than the standard that we are using in the current application. Rather than make a special interface for that procedure, we can use a general permutation procedure to rearrange things, as in [figure](#page-17-0) 2.7. This program is also simple, but notice that the procedure the-combination that is returned from the combinator and actually runs on args does not have to interpret the permutation specification—this is done once in the let surrounding the-combination and referred to within. In general, writing code this way allows some deep optimizations by early computation, even in the light of very late binding! + +![](설계원칙-045-099_images/_page_17_Picture_0.jpeg) + +**[Figure](#page-16-0) 2.7** The combinator (permute-arguments 1 2 0 3) takes a function *f* of four arguments and produces a new function of four arguments that permutes its arguments according to the supplied permutation before passing them to *f*. + +``` +(define (permute-arguments . permspec) + (let ((permute (make-permutation permspec))) + (lambda (f) + (define (the-combination . args) + (apply f (permute args))) + (let ((n (get-arity f))) + (assert (= n (length permspec))) + (restrict-arity the-combination n))))) +(((permute-arguments 1 2 0 3) + (lambda (x y z w) (list 'foo x y z w))) + 'a 'b 'c 'd) +(foo b c a d) +``` + +The procedure make-permutation is simple, but it is not efficient: + +``` +(define (make-permutation permspec) + (define (the-permuter lst) + (map (lambda (p) (list-ref lst p)) + permspec)) + the-permuter) +``` + +### **2.1.2 Combinators and body plans** + +A moral of this story is that a structure composed of combinations of combinators is a body plan, much like the body plans of animals or engineering patterns like the superheterodyne radio receiver (figure 1.1 on page 10). Consider the compose combinator. It provides an arrangement of locales, the procedures f and g. The locales are connected by a standard interconnect, but that is all that + +is required of f and g. Indeed, these components may be anything that can take the right number of arguments and can return the right number of values. So the combinators are organizing principles, like Hox genes: they specify locales and their relationship without mandating what happens inside each locale. + +# **Exercise 2.4: As compositions?** + +You may have noticed that the combinators made by discardargument, curry-argument, and permute-arguments can each be thought of as a composition of an argument manipulation and a procedure. Rebuild these combinators as compositions using the multiple-value return mechanism. + +# **Exercise 2.5: Useful combinators** + +It is time to fill out this small library a bit more. + +- **a.** The combinators discard-argument and curry-argument could be generalized to allow ignoring or prespecializing on more than one argument. The method of specifying the permutation for permute-arguments seems to be a pretty general way to specify arguments by their order in a call (zero-based). Build generalized versions of these procedures that have such an interface. Name them discard-arguments and curryarguments. Make your code compatible with the code in the text: your (curry-arguments 2) should do exactly what (curry-argument 2) does. +- **b.** What other combinators would you find useful? Make up a list, with appropriate use cases that you might encounter in actual code. Write implementations of them for your library. +- **c.** Further generalize compose so that it can take any number of functional aguments. The expression (compose f g h) is + +equivalent to (compose f (compose g h)). Note that it should also be equivalent to (compose (compose f g) h). Be careful: what is the composition of zero arguments? + +# **2.2 Regular expressions** + +Regular expressions are widely used for string matching. Although regular-expression systems are derived from a perfectly good mathematical formalism, the particular choices made by implementers to expand the formalism into useful software systems are often disastrous: the quotation conventions adopted are highly irregular; the egregious misuse of parentheses, both for grouping and for backward reference, is a miracle to behold. In addition, attempts to increase the expressive power and address shortcomings of earlier designs have led to a proliferation of incompatible derivative languages. + +On the surface, regular expressions look like a combinator language, because expression fragments can be combined to make more complex expressions. But the meaning of a fragment is highly dependent on the expression it is embedded in. For example, if we want a caret, ∧, in a bracket expression, [...], the caret must not be in the first character position, because if the caret appears after the first character it is just an ordinary character, but if it appears as the first character it negates the meaning of the bracket expression. Thus a bracket expression may not contain just a caret. + +So the syntax of the regular-expression language is awful; there are various incompatible forms of the language; and the quotation conventions are *baroquen* [sic]. While regular expression languages are domain-specific languages, they are bad ones. Part of the value of examining regular expressions is to experience how bad things can be. + +Nevertheless, there is a great deal of useful software, for example grep, that uses regular expressions to specify the desired behavior. We will invent a better domain-specific combinator language for + +specifying regular expressions and a means of translating this language to conventional regular-expression syntax. We will use the POSIX Basic Regular Expression (BRE) syntax as a target for our translator [96], since it is a subset of most other regular-expression syntaxes. POSIX also defines a more powerful Extended Regular Expression (ERE) syntax, which we will consider in an exercise. + +With this machinery we will be able to use the capabilities of systems like grep from inside the Scheme environment. We will have all the advantages of a combinator language. It will have a clean, modular description while retaining the ability to use existing tools. Users of this language will have nothing to *grep* about, unless they value concise expression over readability. + +As with any language there are primitives, means of combination, and means of abstraction. Our language allows the construction of patterns that utilities like grep can match against character-string data. Because this language is embedded in Scheme, we inherit Scheme's power: we can use Scheme constructs to combine patterns and use Scheme procedures to abstract them. + +### **2.2.1 A regular expression combinator language** + +Patterns are built out of these primitive patterns: + +``` +(r:dot) matches any character except newline +(r:bol) matches only the beginning of a line +(r:eol) matches only the end of a line +(r:quote string) matches the string +(r:char-from string) matches one character that is in the string +(r:char-not-from string) matches one character that is not in +the string +``` + +Patterns can be combined to make compound patterns: + +``` +(r:seq pattern ...) +``` + +This pattern matches each argument *pattern* in sequence, from left to right. + +``` +(r:alt pattern ...) +``` + +This pattern tries each argument *pattern* from left to right, until one of these alternatives matches. If none matches then this pattern does not match. + +``` +(r:repeat min max pattern) +``` + +This pattern tries to match the argument *pattern* a minimum of *min* times but no more than a maximum of *max* times. If *max* is given as #f then no maximum is specified. If *max* equals *min* the given pattern must be matched exactly that many times. + +Here are some example patterns: + +``` +(r:seq (r:quote "a") (r:dot) (r:quote "c")) +matches any three-character string beginning with a and ending +with c. For example, it will match abc and aac and acc. +``` + +``` +(r:alt (r:quote "foo") (r:quote "bar") (r:quote "baz")) +matches either foo, bar, or baz. +``` + +``` +(r:repeat 3 5 (r:alt (r:quote "cat") (r:quote "dog"))) +matches catdogcat and catcatdogdog and dogdogcatdogdog but +not catcatcatdogdogdog. +``` + +We will implement patterns as Scheme expressions. Thus we can freely mix them with any Scheme code, giving us all the power of the programming language. + +# **2.2.2 Implementation of the translator** + +Let's look at how this language is implemented. Regular expressions will be represented as strings in the POSIX Basic Regular Expression syntax. + +``` +(define (r:dot) ".") +(define (r:bol) "∧") +(define (r:eol) "$") +``` + +These directly correspond to regular-expression syntax. + +Next, r:seq implements a way to treat a given set of regularexpression fragments as a self-contained element: + +``` +(define (r:seq . exprs) + (string-append "\\(" (apply string-append exprs) "\\)")) +``` + +The use of parentheses in the result isolates the content of the given expression fragments from the surrounding context. Unfortunately, the use of \ in the translated output is necessary. In basic regular expressions, the parenthesis characters are treated as self-quoting characters. Here we need them to act as grouping operations, which is done by preceding each with a backslash. Adding insult to injury, when this regular expression is put into a Scheme string, it is necessary to quote each backslash character with *another backslash*. So our example (r:seq (r:quote "a") (r:dot) (r:quote "c")) translates to \(\(a\).\(c\)\), or as a Scheme string "\\(\\(a\\).\\(c\\)\\)". Ugh. + +The implementation of r:quote is a bit harder. In a regular expression, most characters are self-quoting. However, some characters are regular-expression operators and must be explicitly quoted. We wrap the result using r:seq to guarantee that the quoted string is self-contained. + +``` +(define (r:quote string) + (r:seq + (list->string + (append-map (lambda (char) + (if (memv char chars-needing-quoting) + (list #\\ char) + (list char))) + (string->list string))))) +(define chars-needing-quoting + '(#\. #\[ #\\ #\∧ #\$ #\*)) +``` + +To implement alternative subexpressions, we interpolate a vertical bar between subexpressions and wrap the result using r:seq: + +``` +(define (r:alt . exprs) + (if (pair? exprs) + (apply r:seq + (cons (car exprs) + (append-map (lambda (expr) + (list "\\|" expr)) + (cdr exprs)))) + (r:seq))) +``` + +(r:alt (r:quote "foo") (r:quote "bar") (r:quote "baz")) translates to \(\(foo\)\|\(bar\)\|\(baz\)\). In addition to quoting the parenthesis characters, we must also quote the vertical bar character, which is otherwise a self-quoting character in this syntax. Note that alternative expressions, unlike the rest of the regular expressions supported here, are not supported by BRE syntax: they are an extension defined by GNU grep that is supported by many implementations. (Alternatives *are* supported by ERE syntax.) + +It is straightforward to implement repetition by using copies of the given regular expression: + +``` +(define (r:repeat min max expr) + (apply r:seq + (append (make-list min expr) + (cond ((not max) (list expr "*")) + ((= max min) '()) + (else + (make-list (- max min) + (r:alt expr ""))))))) +``` + +This makes min copies of expr, followed by (- max min) optional copies, where each optional copy is an alternative of the expression and an empty expression. If there is no maximum, [9](#page-54-0) the expression is followed by an asterisk to match any number of times. So (r:repeat 3 5 (r:alt (r:quote "cat") (r:quote "dog"))) translates to something large that might cause seizures in the reader. + +The implementation of r:char-from and r:char-not-from is complicated by the need for baroque quotation. This is best organized in two parts, the first to handle the differences between them, and the second for the quotation handling that they have in common: + +``` +(define (r:char-from string) + (case (string-length string) + ((0) (r:seq)) + ((1) (r:quote string)) + (else + (bracket string + (lambda (members) + (if (lset= eqv? '(#\- #\∧) members) + '(#\- #\∧) + (quote-bracketed-contents members))))))) +(define (r:char-not-from string) + (bracket string + (lambda (members) + (cons #\∧ (quote-bracketed-contents members))))) +(define (bracket string procedure) + (list->string + (append '(#\[) + (procedure (string->list string)) + '(#\])))) +``` + +The special cases for r:char-from handle empty and singleton sets of characters specially, which simplifies the general case. There is also a special case for a set containing only caret and hyphen. But r:char-not-from has no such special cases. + +The general case handles the quotation of the three characters that have special meaning inside a bracket by placing them in positions where they are not operators. (We told you this was ugly!) + +``` +(define (quote-bracketed-contents members) + (define (optional char) + (if (memv char members) (list char) '())) + (append (optional #\]) + (remove + (lambda (c) + (memv c chars-needing-quoting-in-brackets)) + members) +``` + +``` +(optional #\∧) + (optional #\-))) +(define chars-needing-quoting-in-brackets + '(#\] #\∧ #\-)) +``` + +In order to test this code, we can print the corresponding grep command and use cut and paste to run it in a shell. Because different shells use different quoting conventions, we need to not only quote the regular expression, but also choose which shell to use. The Bourne shell is ubiquitous, and has a relatively simple quoting convention. + +``` +(define (write-bourne-shell-grep-command expr filename) + (display (bourne-shell-grep-command-string expr filename))) +(define (bourne-shell-grep-command-string expr filename) + (string-append "grep -e " + (bourne-shell-quote-string expr) + " " + filename)) +``` + +The Bourne quoting convention uses single-quote characters surrounding a string, which quotes anything in the string other than a single-quote, which ends the quoted string. So, to quote a singlequote character, we must end the string, quote the single quote explicitly using backslash, and then start another quoted string. The shell interprets this concatenation as a single token. (Are we having fun yet?) + +``` +(define (bourne-shell-quote-string string) + (list->string + (append (list #\') + (append-map (lambda (char) + (if (char=? char #\') + (list #\' #\\ char #\') + (list char))) + (string->list string)) + (list #\')))) +``` + +### **The moral of this story** + +Our translator is very complicated because most regular expressions are not composable to make larger regular expressions unless extreme measures are taken to isolate the parts. Our translator does this work, but consequently the regular expressions that it generates have much unnecessary boilerplate. Humans don't write regular expressions this way, because they use boilerplate only where necessary—but they often miss instances where it is necessary, causing hard-to-find bugs. + +The moral of this story is that regular expressions are a beautiful example of how *not* to build a system. Using composable parts and combinators to make new parts by combining others leads to simpler and more robust implementations. + +# **Exercise 2.6: Adding \* and + to regular expressions** + +In the traditional regular expression language the asterisk (\*) operator following a subpattern means zero or more copies of the subpattern. A common extension to the language adds the plus-sign (+) operator. A plus sign following a subpattern means one or more copies of the subpattern. + +Define Scheme procedures r:\* and r:+ to take a pattern and iterate it as necessary. This can be done in terms of r:repeat. + +Demonstrate your procedures on real data in complex patterns. + +# **Exercise 2.7: A bug, one bad joke, two tweaks, and a revelation** + +Ben Bitdiddle has noticed a problem with our implementation of (r:repeat *min max expr*). + +The use of (r:alt expr "") at the end of the r:repeat procedure is a bit dodgy. This code fragment translates to \(*expr*\|\), where *expr* is the value of expr. This relies on the fact that alternation with something and nothing is the equivalent of saying "one or none." (We will omit the required but confusing backslashes + +in the rest of this explanation.) That is: (*expr*|) denotes one or no instances of *expr*. Unfortunately, this depends on an undocumented GNU extension to the formal POSIX standard for REs. + +Specifically, section 9.4.3 of the POSIX standard [10](#page-54-1) states that a vertical line appearing immediately before a close parenthesis (or immediately after an open parenthesis) produces undefined behavior. In essence, an RE must not be a null sequence. + +GNU grep just happens to "do the right thing" when presented with (*x*|). Not all grep implementations are as tolerant. + +Therefore, Ben asks his team of three code hackers (Louis, Alyssa, and Eva) to propose alternative workarounds. Ultimately, he proposes his own patch, which you will implement. + +- Louis Reasoner suggests that a simple, elegant fix would be to replace the code fragment (r:alt expr "") with a straightforward call to (r:repeat 0 1 expr). +- Alyssa P. Hacker proposes to rewrite the else clause of r:repeat to translate (r:repeat 3 5 *x*) into the equivalent of (*xxx*|*xxxx*|*xxxxx*) instead of the naughty *xxx*(*x*|)(*x*|) non-POSIXcompliant undefined regular expression that our code produces. She refers to section 9.4.7 of the POSIX regular expression documentation. [11](#page-54-2) +- Eva Lu Ator points to the question mark (?) operator in section 9.4.6.4 [12](#page-54-3) and proposes that a better fix would be to implement an r:? operator and replace (r:alt expr "") with (r:? expr). +- Meanwhile, Ben looks closely at the RE spec and has a revelation. He proposes that r:repeat be reimplemented to emit Interval Expressions. See section 9.3.6.5 of the POSIX documentation. [13](#page-54-4) + +Please try not to get sick. + +Let's consider each proposal: + +**a.** Everyone giggles at Louis's silly joke. What's so funny about it? That is, what's wrong with this idea? + +A one-sentence punchline will do. + +**b.** What advantages does Eva's proposal have over Alyssa's in terms of both code and data? + +A concise yet convincing few sentences suffice. + +**c.** What advantage does Ben's proposal have over all the others? Specifically, ponder which section of the POSIX document he cites versus which sections the others cite, then take a quick peek at exercise 2.10 below and consider the implications. Also, consider the size of the output strings in this new code as well as the overall clarity of the code. + +Again, a brief sentence or two is sufficient. + +**d.** Following Ben's proposal, reimplement r:repeat to emit Interval Expressions. Hint: Scheme's number->string procedure should be handy. Caveat: Beware the backslashes. + +Show the output generated by r:repeat on a few well-chosen sample inputs. Demonstrate your procedure on real data in some complex patterns. + +## Exercise 2.8: Too much nesting + +Our program produces excessively nested regular expressions: it makes groups even when they are not necessary. For example, the following simple pattern leads to an overly complex regular expression: + +``` +(display (r:seq (r:quote "a") (r:dot) (r:quote "c"))) ((a).(c)) +``` + +Another problem is that BREs may involve back-references. (See section 9.3.6.3 of the POSIX regular expression documentation.14) A back-reference refers to a preceding parenthesized subexpression. So it is important that the parenthesized subexpressions be ones explicitly placed by the author of the pattern. (Aargh! This is one of + +the worst ideas we have ever heard of—grouping, which is necessary for iteration, was confused with naming for later reference!) + +**To do:** Edit our program to eliminate as much of the unnecessary nesting as you can. Caution: There are subtle cases here that you have to watch out for. What is such a case? Demonstrate your better version of our program and show how it handles the subtleties. + +Hint: Our program uses strings as its intermediate representation as well as its result. You might consider using a different intermediate representation. + +## **Exercise 2.9: Back-references** + +Add a procedure for constructing back-references. (See exercise 2.8.) Have fun getting confused about BREs. + +## **Exercise 2.10: Standards?** + +The best thing about standards is that there are so many to choose from. + +Andrew S. Tannenbaum + +In addition to Basic Regular Expressions (BREs), there are Extended Regular Expressions (EREs) defined in the POSIX regular expression documentation [96]. Some software, such as egrep, uses this version of regular expressions. Unfortunately EREs are not a conservative extension of BREs: ERE syntax is actually inconsistent with BRE syntax! It is an interesting project to extend our Scheme pattern language so that the target can be either BREs or EREs. + +**a.** What are the significant differences between BREs and EREs that make this a pain? List the differences that must be addressed. + +- **b.** How can our translator be factored so that our language can translate into either kind of regular expression, depending on what is needed? How can we maintain the abstract layer that is independent of the target regular expression language? Explain your strategy. +- **c.** Implement the strategy you devised in part **b**. Demonstrate your work by making sure that you can run egrep as well as grep, with equivalent results in cases that test the differences you found in part **a**. + +# **2.3 Wrappers** + +Sometimes we can repurpose an existing program by wrapping it rather than rewriting it. Consider the problem of computing how the radius of a sphere of gas varies with the temperature, keeping the pressure constant. The ideal gas law is + +$$PV = nRT, (2.1)$$ + +where *P* is the pressure, *V* is the volume, *n* is the amount of the gas, *R* is the gas constant, and *T* is the temperature. So the volume is computed by + +``` +(define (gas-law-volume pressure temperature amount) + (/ (* amount gas-constant temperature) pressure)) +(define gas-constant 8.3144621) ;J/(K*mol) +``` + +and the radius of a sphere is computed by + +``` +(define (sphere-radius volume) + (expt (/ volume (* 4/3 pi)) 1/3)) +(define pi (* 4 (atan 1 1))) +``` + +(Note: 4/3 and 1/3 are rational constants—the slash is not an infix division operator.) The choice of gas constant makes this program use SI units, so the pressure is in newtons per square meter, the temperature is in kelvins, the amount is in moles, the volume is in cubic meters, and the radius is in meters. + +This looks straightforward, but use of other units can make things complicated. Suppose we want to measure the temperature in degrees Fahrenheit, the pressure in pounds per square inch, and the radius in inches. Determining the correct formula is more complicated than computing the numerical answer. We could modify the simple formula to account for the units, but this obscures the idea of the program and specializes it to the particular problem. Alternatively, we could arrange to have a modular way to convert the units. + +A unit conversion is a procedure that is linked to its inverse. We can write temperature conversions between conventional units, such as Fahrenheit and Celsius temperatures, and between SI and conventional units. + +``` +(define fahrenheit-to-celsius + (make-unit-conversion (lambda (f) (* 5/9 (- f 32))) + (lambda (c) (+ (* c 9/5) 32)))) +(define celsius-to-kelvin + (let ((zero-celsius 273.15)) ;kelvins + (make-unit-conversion (lambda (c) (+ c zero-celsius)) + (lambda (k) (- k zero-celsius))))) +``` + +We can access the inverse procedure using unit:invert. For example, + +``` +(fahrenheit-to-celsius -40) +-40 +(fahrenheit-to-celsius 32) +0 +((unit:invert fahrenheit-to-celsius) 20) +68 +``` + +We can compose unit conversions: + +``` +((compose celsius-to-kelvin fahrenheit-to-celsius) 80) +299.81666666666666 +``` + +And we can define compound unit conversions. For example, pressure can be expressed in in pounds per square inch or newtons per square meter. [15](#page-54-6) + +``` +(define psi-to-nsm + (compose pound-to-newton + (unit:invert inch-to-meter) + (unit:invert inch-to-meter))) +``` + +So now we can compute, in inches, the radius of a sphere occupied by 1 mole of an ideal gas at 68 *◦*F and 14.7 psi. + +``` +((unit:invert inch-to-meter) + (sphere-radius + (gas-law-volume + (psi-to-nsm 14.7) + ((compose celsius-to-kelvin fahrenheit-to-celsius) 68) + 1))) +7.049624635839811 +``` + +This is a mess! This implementation of unit conversions, while simple to program, is hard to read and hard to use. On the other hand, it nicely separates several concerns. The physics of the gas law is separated from the geometry of the sphere and the units of measurement. The physical and geometric descriptions are uncluttered and each is easy to read. + +We can do better. We can build a small domain-specific language, where the domain is units. This will simplify the job of constructing new converters, and make the resulting converters more readable. + +### **2.3.1 Specialization wrappers** + +One way to proceed is to make a general family of wrappers that can take a procedure like gas-law-volume and produce a version of that procedure specialized by unit conversions for its output and inputs. Although we will show how to do this for unit conversions, the code will be general enough to build wrappers for arbitrary transformations of data. + +For the problem at hand we can construct a specializer for the gas-law-volume procedure that knows its native units (SI). The specializer is defined by a simple language that is compiled into the appropriate combinations of primitive unit conversions. This is somewhat like a combinator system except that the combinators are generated by the compiler according to a high-level specification. We will see this technique again in chapter 4, where we use it to compile combinations of pattern-matching procedures from patterns. + +``` +(define make-specialized-gas-law-volume + (unit-specializer + gas-law-volume + '(expt meter 3) ; output (volume) + '(/ newton (expt meter 2)) ; pressure + 'kelvin ; temperature + 'mole)) ; amount +``` + +To make a version of the gas-law-volume procedure that uses other units we supply the units that we want to use: + +``` +(define conventional-gas-law-volume + (make-specialized-gas-law-volume + '(expt inch 3) ; output (volume) + '(/ pound (expt inch 2)) ; pressure + 'fahrenheit ; temperature + 'mole)) ; amount +``` + +This procedure can then be used to produce the volume in cubic inches, and therefore we can get the radius in inches. + +``` +(sphere-radius (conventional-gas-law-volume 14.7 68 1)) +7.04962463583981 +``` + +### **2.3.2 Implementing specializers** + +How can we make this work? There are two parts: a procedure unit-specializer that wraps a given procedure with the necessary unit conversions, and a means of translating the given unit expressions into the appropriate unit conversion. The first part is + +``` +(define (unit-specializer procedure implicit-output-unit + . implicit-input-units) + (define (specializer specific-output-unit + . specific-input-units) + (let ((output-converter + (make-converter implicit-output-unit + specific-output-unit)) + (input-converters + (map make-converter + specific-input-units + implicit-input-units))) + (define (specialized-procedure . arguments) + (output-converter + (apply procedure + (map (lambda (converter argument) + (converter argument)) + input-converters + arguments)))) + specialized-procedure)) + specializer) +``` + +The procedure unit-specializer takes a procedure to be specialized and its implicit native units, and returns a specializer that takes specific units and creates a specialized version of the given procedure. The only tricky part is making sure that unit expressions are passed to make-converter in the correct order. + +The second part of the solution is make-converter, which takes two unit expressions, and returns a converter procedure that converts data in the first unit to the second unit. For this problem, we will make a version of make-converter that's really dumb: it treats the unit expressions as literal constants that can be compared with equal?. With that simplification, make-converter can use a table lookup to find the appropriate converter, which means we have to explicitly provide every necessary conversion rather than deriving them from primitive unit conversions. Here's an example of how the table is created: + +``` +(register-unit-conversion 'fahrenheit 'celsius + fahrenheit-to-celsius) +(register-unit-conversion 'celsius 'kelvin + celsius-to-kelvin) +``` + +This registers the conversions we defined earlier. Once these conversions are registered, we can look up either conversion direction by the order of arguments passed to make-converter. + +However, what we need isn't either of these conversions, but instead the conversion from fahrenheit to kelvin. Since we don't want to infer this from the existing definitions—an interesting but much more complex implementation—we will have to build compound conversions from the existing ones. To make that easy, we will introduce an "algebra" of unit conversions, as follows: + +``` +(define (unit:* u1 u2) + (make-unit-conversion (compose u2 u1) + (compose (unit:invert u1) + (unit:invert u2)))) +``` + +The procedure unit:\*, combined with unit:invert, provides us with a general ability to combine unit conversions. For convenience, we will add the following, which are easily derived from unit:\* and unit:invert: + +``` +(unit:/ u1 u2) +(unit:expt u n) +``` + +With this algebra, we can write the conversions we want: + +``` +(register-unit-conversion 'fahrenheit 'kelvin + (unit:* fahrenheit-to-celsius celsius-to-kelvin)) +(register-unit-conversion '(/ pound (expt inch 2)) + '(/ newton (expt meter 2)) + (unit:/ pound-to-newton + (unit:expt inch-to-meter 2))) +(register-unit-conversion '(expt inch 3) '(expt meter 3) + (unit:expt inch-to-meter 3)) +``` + +### **2.3.2 Adapters** + +What we have shown here is one possible technique for taking an existing program and broadening its applicability without changing the original program. The resulting "adapter" mechanism is itself + +extensible and can be used to generalize many other kinds of programs. + +This is an important principle: rather than rewriting a program to adapt it to a new purpose, it's preferable to start with a simple and general base program and wrap it to specialize it for a particular purpose. The program doesn't know anything about the wrappers, and the wrappers make few assumptions about the underlying program. And the unit-specializer procedure knows very little about either. Because these parts are so loosely coupled, they can each be generalized for many purposes, including those we aren't thinking about here. This is a kind of layering strategy, which we will expand upon in chapter 6. + +# **Exercise 2.11: Implementing unit conversions** + +Here we ask you to fill in the details that make this system work. + +- **a.** As a warmup, write the procedures register-unitconversion, and make-converter. +- **b.** Write the procedures unit:/ and unit:expt. +- **c.** Fill out a library of conversions for conventional units to SI units. This requires conversions for mass and length. (Time is in seconds in both systems. However, you may be interested in minutes, hours, days, weeks, years, etc. Don't get stuck trying to make this universal.) +- **d.** Make some useful compounds, like velocity and acceleration. +- **e.** For a real project, extend this specializer system for some other data conversion of some other program, having nothing to do with units. +- **f.** Another big extension is to build make-converter so that it can derive compound conversions, as required, from previously registered conversions. This will require a graph search. + +## **2.4 Abstracting a domain** + +Let's look at how a domain-specific language layer can be created as a basis for software about board games. There are many common features of board games; each game combines some of those features. A *domain model* can be built that captures the common structure of a class of board games, in terms of the abstract concepts that describe board games, such as pieces, potential locations, and primitive behaviors such as moving and capturing. + +A particular board game program may be constructed entirely in terms of the domain model. If the domain model is sufficiently general, it will support future variation without change to the model itself. + +Let's consider board games such as chess and checkers. They are both two-person games played on a board that is a rectangular grid. The players have pieces that are arrayed on the board. There is never more than one piece at any position on the board. The players alternate moves. On each move a player chooses a piece and moves it to some other location on the board. Sometimes an opponent's piece is captured. This is an informal description of a domain model for a class of board games. + +Based on this kind of domain model we will construct a *referee* for checkers that will compute all legal moves for a player at a given state of play. The domain model's implementation is fairly complex, providing implementations of pieces, coordinates, and the board. In order to simplify our presentation we will restrict ourselves to just what is needed by the referee. + +The general organization of the referee is that it will generate all the legal moves for each piece separately and then aggregate them. In order to do this, it's helpful to have an abstraction that keeps track of the effects of moving a piece. For example, one effect might change a piece's position, another might change its type (e.g., "kinging" in checkers), and yet another might capture an opponent's + +piece. Each legal move consists of a sequence of such changes applied to the initial state of the move. + +A good program must be written many times. This is true of the programs we show. The first draft may not clearly separate out the concerns, but by making that draft the programmer learns the structure of the problem. We will show two different implementations, which will reveal the evolution of the program as we identify shortcomings in our draft. + +### **2.4.1 A monolithic implementation** + +Let's start with a simple version of the referee that one might write to understand what really has to be done. + +### **A checkers domain model** + +The first implementation will be built on a domain model that is specific to checkers and fairly simple. In the later implementation we will abstract away the checkers-specific parts and hide many of the details of the domain model. The final domain model will support other similar board games, and perhaps other domains. + +The domain model we will use has three abstract types. A *board* tracks the live pieces and the color of the player to move next (the *current* player). It can be asked what piece, if any, is in a particular position. A *piece* has a color, a position, and whether it is a king. A *position* is specified by *coordinates* that are relative to the player to move. Here are the operations on boards: + +``` +(current-pieces board) +gets a list of the pieces belonging to the current player. +``` + +``` +(is-position-on-board? coords board) +``` + +tests whether the given *coords* specify a position on *board*. Coordinates that do not satisfy this predicate will cause errors when used with other operations. + +``` +(board-get coords board) +``` + +gets the piece that is at the position specified by *coords*. If there is no piece in that position it returns #f. + +``` +(position-info coords board) +``` + +describes what occupies the position *coords* in *board*. If the position is empty the value is unoccupied; if it contains one of the current player's pieces the value is occupied-by-self; if it contains an opponent's piece the value is occupied-by-opponent. + +``` +(is-position-unoccupied? coords board) +is equivalent to position-info returning unoccupied. +``` + +``` +(is-position-occupied-by-self? coords board) +is equivalent to position-info returning occupied-by-self. +``` + +``` +(is-position-occupied-by-opponent? coords board) +is equivalent to position-info returning occupied-by-opponent. +``` + +There is a similarly small set of operations on pieces: + +``` +(piece-coords piece) +gets the coordinates of piece. +``` + +``` +(should-be-crowned? piece) +``` + +tests whether *piece* should be crowned—specifically, if it is not already a king and is on the opponent's home row. + +``` +(crown-piece piece) +``` + +gets a new piece identical to *piece* except that it is a king. + +``` +(possible-directions piece) +``` + +gets a list of directions that *piece* may consider for a move. This does not take into account whether moving in that direction is permissible. + +The coordinate system is simple: just row and column integers. When we refer to *coordinates* or *coords*, we mean absolute + +coordinates on the board. We use the term *offset* for relative coordinates. An offset can be added to some coordinates to produce new coordinates, or inversely two coordinates can be subtracted to produce an offset. A *direction* is an offset in which the row and column are 0, 1, or −1; For checkers, the possible directions are the two forward diagonals, with the row 1 and the column either −1 or 1. Once a piece becomes a king, it can additionally use the backward diagonals, with row −1. In chess, the possible moves use additional directions, depending on the piece, while a knight move needs a more complex definition. We won't define the procedures for manipulating coordinates; they should be self-explanatory. + +### **A checkers referee** + +(step-to *step*) + +We need a data structure to represent each move. Since any given move may require changing a piece's position multiple times, we will use a list of *step* objects, each of which specifies the piece prior to the step, the piece after the step, the board after the step, and whether the step is a jump. Such a list, which we will call a *path*, is ordered from newest step to oldest. This ordering facilitates sharing of common subpaths that may occur when a move can be continued in multiple ways. + +``` +gets the piece after step is taken. +(step-board step) +gets the board after step is taken. +(make-simple-move new-coords piece board) +gets a step that moves piece to new-coords on board. +``` + +(make-jump *new-coords jumped-coords piece board*) gets a step that moves *piece* to *new-coords* on *board* and removes the opponent's piece at *jumped-coords*. + +(replace-piece *new-piece old-piece board*) gets a step that replaces *old-piece* with *new-piece* on *board*. + +``` +(path-contains-jumps? path) +tests whether any of the steps in path are jumps. +``` + +Let's build our referee. We will start by describing what simple steps are possible from a given starting point in a given direction. The try-step procedure identifies a potential next step, augmenting the given path. If there is no such step, it returns #f. + +``` +(define (try-step piece board direction path) + (let ((new-coords + (coords+ (piece-coords piece) direction))) + (and (is-position-on-board? new-coords board) + (case (position-info new-coords board) + ((unoccupied) + (and (not (path-contains-jumps? path)) + (cons (make-simple-move new-coords + piece + board) + path))) + ((occupied-by-opponent) + (let ((landing (coords+ new-coords direction))) + (and (is-position-on-board? landing board) + (is-position-unoccupied? landing board) + (cons (make-jump landing + new-coords + piece + board) + path)))) + ((occupied-by-self) #f) + (else (error "Unknown position info")))))) +``` + +The procedure looks at the position one step along the given direction; if it's unoccupied, then it's possible to move there. (We explicitly test whether this is a continuation of a jump, as that is not allowed in checkers.) If the position is occupied by one of the player's pieces, no move is possible. But if the position is occupied by an opponent's piece, and the next position in that direction is unoccupied, then we can jump over the opponent's piece and capture it. + +We must try each possible direction for the piece. The procedure compute-next-steps returns a list of possible next paths by augmenting an existing path by one step. + +``` +(define (compute-next-steps piece board path) + ;; filter-map drops false values + (filter-map (lambda (direction) + (try-step piece board direction path)) + (possible-directions piece))) +``` + +The rules of checkers mandate choosing a jump when one or more is possible: + +``` +(define (evolve-paths piece board) + (let ((paths (compute-next-steps piece board '()))) + (let ((jumps (filter path-contains-jumps? paths))) + (if (null? jumps) + paths + (evolve-jumps jumps))))) +``` + +And after an initial jump, we must test for other possible jumps: + +``` +(define (evolve-jumps paths) + (append-map (lambda (path) + (let ((paths + (let ((step (car path))) + (compute-next-steps (step-to step) + (step-board +step) + path)))) + (if (null? paths) + (list path) + ;; continue jumping if possible + (evolve-jumps paths)))) + paths)) +``` + +That is the logic for generating the moves for a single piece. The referee must do this for every piece and aggregate the results: + +``` +(define (generate-moves board) + (crown-kings + (mandate-jumps + (append-map (lambda (piece) + (evolve-paths piece board)) + (current-pieces board))))) +``` + +This procedure does two things in addition to generating the moves. First, the aggregated moves may contain jumps for some pieces and ordinary moves for others, in which case only the jumps are legal moves. + +``` +(define (mandate-jumps paths) + (let ((jumps (filter path-contains-jumps? paths))) + (if (null? jumps) + paths + jumps))) +``` + +Second, if any piece reaches the opponent's home row, it must be made a king. + +``` +(define (crown-kings paths) + (map (lambda (path) + (let ((piece (step-to (car path)))) + (if (should-be-crowned? piece) + (cons (replace-piece (crown-piece piece) + piece + (step-board (car path))) + path) + path))) + paths)) +``` + +### **Critique** + +This code is quite nice; it is surprisingly compact, and it is written in terms of the domain model. However, the rules of checkers are distributed throughout the code. The availability of a jump is discovered in the procedure try-step, but the fact that jumps may chain is in evolve-jumps. Also, the rule that if a jump is available a jump must be taken is split between the procedures evolve-paths and mandate-jumps. A more subtle problem is that the control structure of the referee is interwoven with the rules. For example, the accumulation of changes (steps in the path) is built into the control structure, as is chaining of a multiple jump. The reason why the logic for mandating jumps is in two places is that it is required by the distribution of the control structure. + +### **2.4.2 Factoring out the domain** + +Let's try to ameliorate the problems noted in the previous implementation. Can we separate the domain model and control structure from the rules of checkers? + +### **A domain model** + +We can reuse the coordinates, pieces, and board from our monolithic implementation, since they are largely unchanged. However, we will eliminate the specific idea of king and non-king pieces, instead using a symbolic type. This introduces two new operations: + +``` +(piece-type piece) +gets the type of piece. +``` + +``` +(piece-new-type piece type) +``` + +gets a new piece identical to *piece* except that it has the given *type*. + +We redefine should-be-crowned? and crown-piece to use the piece type, so they behave the same as before, but they are no longer part of the core domain model. + +Although the procedure possible-directions is specific to checkers, we will use it here, but only when defining the rules of checkers. It is not part of the new domain model. + +The step data structure is also specific to checkers, because it specifies whether a step is a jump. We will replace it with a more general structure called a *change*: + +``` +(make-change board piece flags) +``` + +creates a new change object. The *flags* argument is a list of symbols that we can use to indicate changes of state such as capture of a piece. The selectors get-board, get-piece, and get-flags can be used to get the corresponding parts of a change. + +Like the piece type, the change flags provide a way to add gamespecific features to the domain model without baking them in. + +We will replace the path idea with a more abstract notion called a *partial move*. A partial move consists of an initial board and piece, together with zero or more changes. Our code uses the identifier pmove for a partial move. + +``` +(initial-pmove board piece) +creates a pmove with no changes and no flags. +``` + +``` +(is-pmove-empty? pmove) +tests whether pmove is empty: in other words, if it has no changes. +``` + +``` +(is-pmove-finished? pmove) +tests whether pmove has been flagged as finished. +``` + +``` +(current-board pmove) +``` + +returns the board from the most recent change in *pmove*; if there are no changes, it returns the board passed as an argument to initial-pmove. + +``` +(current-piece pmove) +``` + +returns the piece from the most recent change in the *pmove*; if there are no changes, it returns the piece passed as an argument to initial-pmove. + +The next operations extend a pmove in different ways. When we say "extends *pmove* by *foo*" we mean "extends *pmove* by adding a change object that does *foo*." + +``` +(new-piece-position coords pmove) +extends pmove by moving its piece to coords. +``` + +``` +(update-piece procedure pmove) +``` + +extends *pmove* by replacing its piece with the result of calling *procedure* on its piece. + +``` +(finish-move pmove) +``` + +extends *pmove* by adding a change object with a flag that specifies that the move is complete. The result always satisfies the predicate is-pmove-finished?. + +In the implementation of section 2.4.1, we used the terms *jumping* and *capturing* interchangeably. But capturing is a more general idea: for example, in chess, capturing is done by displacing a piece rather than jumping over it. We use a change flag to encode the act of capturing a piece, and the following procedures to manage that flag: + +``` +(captures-pieces? pmove) +tests whether any pieces are captured by pmove. +``` + +``` +(capture-piece-at coords pmove) +``` + +extends *pmove* by removing the piece at *coords*. The position specified by *coords* must contain an opponent's piece. The operation also sets a flag in the new change object saying that a piece was captured; the resulting pmove always satisfies captures-pieces?. + +### **An executive** + +To help separate the control structure from the rules of checkers we build a rule executive that captures the control structure without incorporating the specific content of the rules. In this kind of game there are two kinds of rule. One kind, which we will call an *evolution rule*, augments a pmove, possibly returning multiple derived pmoves. The other kind, an *aggregate rule*, acts on a set of pmoves, eliminating some that are not allowed or extending some to incorporate changes, such as crowning a king. + +Here is an executive that starts with some empty pmoves, one for each of the player's pieces, and evolves these into a collection of pmoves that represent finished moves. It then applies the aggregate rules to the collection of finished pmoves, ultimately returning a collection of the legal moves. + +An evolution rule is implemented as a procedure that transforms a given pmove into a collection of new pmoves, some of which may be finished (satisfy is-pmove-finished?). The executive recursively applies all of the evolution rules to the collection of pmoves until all of them are finished. + +An aggregate rule is implemented as a procedure that accepts a collection of finished pmoves and produces a new collection. Each aggregate rule is applied once, and there are no ordering constraints between aggregate rules, so the executive can compose them together into a single procedure that is the composite aggregate rule. If there are no aggregate rules, then the composite simply returns its argument. + +``` +(define (execute-rules initial-pmoves evolution-rules + aggregate-rules) + ((reduce compose (lambda (x) x) aggregate-rules) + (append-map (lambda (pmove) + (evolve-pmove pmove evolution-rules)) + initial-pmoves))) +(define (evolve-pmove pmove evolution-rules) + (append-map (lambda (new-pmove) + (if (is-pmove-finished? new-pmove) + (list new-pmove) + (evolve-pmove new-pmove evolution- +rules))) + (append-map (lambda (evolution-rule) + (evolution-rule pmove)) + evolution-rules))) +``` + +An evolution rule is registered for use in the executive by the procedure define-evolution-rule and an aggregate rule is registered by the procedure define-aggregate-rule. Each rule has a name, the game that it is registered in, and a procedure implementing its behavior. + +### **Rules of checkers** + +Here is a rule for simple moves. This looks for any unoccupied adjacent position in a possible direction, and extends the pmove to + +include a move to that position. After such a move, it is not legal to continue moving, so we mark that pmove as finished. + +``` +(define-evolution-rule 'simple-move checkers + (lambda (pmove) + (if (is-pmove-empty? pmove) + (get-simple-moves pmove) + '()))) +(define (get-simple-moves pmove) + (filter-map + (lambda (direction) + (let ((landing (compute-new-position direction 1 pmove)) + (board (current-board pmove))) + (and (is-position-on-board? landing board) + (is-position-unoccupied? landing board) + (finish-move (new-piece-position landing +pmove))))) + (possible-directions (current-piece pmove)))) +``` + +In get-simple-moves, the procedure compute-new-position gets the proposed landing site of the piece possibly being moved, given the direction and distance for the move. The procedure offset\* multiplies an offset and a number to get a new offset scaled by the number. + +``` +(define (compute-new-position direction distance pmove) + (coords+ (piece-coords (current-piece pmove)) + (offset* direction distance))) +``` + +The rule for jumps is similar, except that it must look for an occupied position followed by an unoccupied position in a given direction. When no jumps are possible, a pmove is finished. + +``` +(define-evolution-rule 'jump checkers + (lambda (pmove) + (let ((jumps (get-jumps pmove))) + (cond ((not (null? jumps)) + jumps) + ((is-pmove-empty? pmove) + '()) ; abandon this pmove + (else + (list (finish-move pmove))))))) +(define (get-jumps pmove) +``` + +``` +(filter-map + (lambda (direction) + (let ((possible-jump + (compute-new-position direction 1 pmove)) + (landing (compute-new-position direction 2 pmove)) + (board (current-board pmove))) + (and (is-position-on-board? landing board) + (is-position-unoccupied? landing board) + (is-position-occupied-by-opponent? possible-jump + board) + (capture-piece-at possible-jump + (new-piece-position landing + pmove))))) + (possible-directions (current-piece pmove)))) +``` + +Making kings is independent of other rules: just look at all the completed moves and crown any non-king that is on the opponent's home row. + +``` +(define-aggregate-rule 'coronation checkers + (lambda (pmoves) + (map (lambda (pmove) + (let ((piece (current-piece pmove))) + (if (should-be-crowned? piece) + (update-piece crown-piece pmove) + pmove))) + pmoves))) +``` + +And finally, the rule mandating that a jump be taken when one or more is available is done at the end by detecting that case and throwing away all the non-jump moves. + +``` +(define-aggregate-rule 'require-jumps checkers + (lambda (pmoves) + (let ((jumps (filter captures-pieces? pmoves))) + (if (null? jumps) + pmoves + jumps)))) +``` + +### **Critique** + +The rule-based implementation of our referee solves the problems we identified earlier. It removes the control structure from our program and localizes it in the executive. As a consequence, the + +rules are specific: each checkers rule is expressed by a single procedural rule. The rules are not diffused as they were in the earlier implementation. + +However, this comes at a cost: we must add applicability conditions to each rule to prevent it being applied to pmoves for which it is inappropriate. [16](#page-54-7) For example, the simple-move rule must exclude any nonempty pmoves that it is given, because a nonempty pmove might include one or more jumps, which cannot be continued with a simple move. This is a general mis-feature of rule-based systems: every rule must be able to accept the output of any rule; this is normally handled by encoding the control state in the data the rules are applied to. + +## **Exercise 2.12: A bit of chess** + +Using the same domain model we used for checkers, it is possible to capture the rules of chess. There are several important differences, besides the fact that chess involves many types of pieces. One difference is that the range of motion of rooks, bishops, and queens is limited only by obstruction. Another difference is that capture is by displacement rather than jump. In this exercise we will consider only rooks and knights; the remaining pieces are addressed in exercise 2.13. + +- **a.** Construct an analogous referee to generate the legal moves for a rook. Don't try to implement the castling rule. +- **b.** Augment your referee to model the behavior of a knight. + +# **Exercise 2.13: More chess** + +Make a full implementation of the rules of chess. + +# **Exercise 2.14: An advanced project** + +Choose some other domain, not a board game, and build an implementation of the rules of some process using the rule executive and a domain model of your design. This is not easy. + +# **2.5 Summary** + +The techniques displayed and elaborated on in this chapter can be helpful in the design and development of every large-scale system. It is almost always to our advantage to build our systems using mixand-match interchangeable parts with well-defined interfaces. + +In languages with higher-order procedures and lexical scoping, like Scheme or Java, it is easy to make systems of combinators standard means of combination, such as compose—for a library of interchangeable parts. And it is convenient to make parametric parts that share a common interface specification. For example, if our interface specification is procedures that take one argument and return one value, then + +``` +(define (make-incrementer dx) + (lambda (x) (+ x dx))) +``` + +defines a set of interchangeable incrementers. It is much harder to make systems of combinators and libraries of combinable parts with languages like C that do not have lexically scoped higher-order procedures. But with careful planning and some effort it can be done. + +When we are confronted with a system based on parts that do not compose cleanly, such as regular expressions, it is often possible to ameliorate the difficulties by metaprogramming. In that case we built a new combinator-based language that we compiled to the regular expression language, making a pleasant but longwinded alternative. Our regular-expressions combinator language is a fine + +domain-specific intermediate language for programs that need to match strings, but it is not so nice as a scripting language for a user to type. For that purpose we would want to design a clean and more concise syntax for matching strings that can be compiled to a combinator-based intermediate language. [17](#page-54-8) + +Wrappers are a common strategy for making old code useful in a new context. We showed how programs that assumed a particular unit system could be used with other unit systems, by building a system of wrappers that automatically did the necessary unit conversions. To do this we made a small domain-specific language for expressing unit conversions that compiled into the appropriate wrapper. + +But wrappers can be used for more than just adapters for old code. We can wrap a procedure with a wrapper that checks input arguments for reasonableness and checks that the output is a plausible result given the inputs. If such checks fail, the wrapper can raise an error signal. This "paranoid programming style" is a very powerful tool for protecting a system from misuse and for debugging. + +As illustrated with regular expressions and with unit conversions, often the best way to attack a class of problems is to invent a domain-specific language in which the solutions are easy to express. To explore this strategy we divided the problem of generating the legal moves for a board game into three individually extensible pieces: a domain model, a control-structure executive, and the specific rules of the game. The domain model provides a set of primitives that are combined to make the rules, giving us a language for expressing the rules. The application of the rules is sequenced by the control-structure executive. This combination forms the essence of a domain-specific language for expressing the rules of checkerslike board games. + +Every good language has primitives, means of combination of those primitives, and means of abstraction for the combinations. The examples shown in this chapter are embedded in Scheme, and thus are able to use Scheme's powerful means of combination and + +abstraction. But this is only the start. In chapter 5 we will transcend this embedding strategy, using the powerful idea of metalinguistic abstraction. + +- [1](#page-0-0) The generality of the domain model is an example of "Postel's law"—see page 3. +- [2](#page-1-0) There are some notable exceptions: the functional programming extensions introduced by Java 8 directly capture useful combinations. Functional programming languages, such as Lisp and Haskell, have libraries of useful combination mechanisms. +- [3](#page-4-0) Here things are simple, but in complex programs with many internal procedures, descriptive names can make things easier to read and understand. In MIT/GNU Scheme there is a minor advantage to naming the procedure being returned here, because the debugger can show this name for a procedure that would otherwise be anonymous. +- [4](#page-9-0) Documentation of hash table procedures in MIT/GNU Scheme can be found in [51]. +- [5](#page-11-0) We thank Guy L. Steele Jr. for suggesting that we show this decomposition. +- [6](#page-12-2) Documentation of values, call-with-values, and let-values can be found in [51] and [109]. +- [7](#page-15-2) Combinatory logic was invented by Moses Schönfinkel [108] and developed by Haskell Curry [26] in the early 20 th century. Their goal had nothing to do with computation, but rather to simplify the foundations of mathematics by eliminating the need for quantified variables. +- [8](#page-16-1) The MIT/GNU Scheme procedure-arity, used in get-arity, will produce a numerical arity for the procedure returned, so we + +- do not need to put a sticky note on it. +- [9](#page-23-0) We indicate that there is no maximum by calling r:repeat with #f for max. +- [10](#page-27-0) ERE Special Characters, [96] #tag 09 04 03 +- [11](#page-27-1) ERE Alternation, [96] #tag 09 04 07 +- [12](#page-27-2) EREs Matching Multiple Characters, [96] #tag 09 04 06 +- [13](#page-27-3) BREs Matching Multiple Characters, [96] #tag 09 03 06 +- [14](#page-28-0) BREs Matching Multiple Characters, [96] #tag 09 03 06 +- [15](#page-32-0) Note that the composition of two instances of meter-to-inch is a sensible way to convert square meters to square inches. There are unit conversions for which this is not true. For example, taking the square of a kelvin-to-Celsius conversion doesn't make sense, even though the numerical computation produces consistent results. This is a consequence of the fact that Celsius temperature has an offset from the physically meaningful kelvin temperature. Indeed, the square of a Celsius temperature has no physical meaning. +- [16](#page-50-0) However, because the rule executive explicitly handles finished pmoves, we don't need to test for those in the rules. +- [17](#page-52-0) SRFI 115 [110] is an interesting example. \ No newline at end of file diff --git a/raw/book/설계원칙-045-099_images/_page_12_Figure_0.jpeg b/raw/book/설계원칙-045-099_images/_page_12_Figure_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8c51482a3f16ba540d91b4e03dec7dc920364edd GIT binary patch literal 39716 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 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_14_Picture_4.jpeg b/raw/book/설계원칙-045-099_images/_page_14_Picture_4.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7cf97b319f9c8c98081f354d6ebe299f68f30bc1 GIT binary patch literal 11684 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 X+f1{tk~#A`^6|%V^`G2_!=C&Taz+6- literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_15_Picture_2.jpeg b/raw/book/설계원칙-045-099_images/_page_15_Picture_2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3c04448814de67cd2595be61f1622b37eedfd004 GIT binary patch literal 12495 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 K$;RTbXa5Ai1HJ74 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_17_Picture_0.jpeg b/raw/book/설계원칙-045-099_images/_page_17_Picture_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a8f09405b90e5deb5d37ea3162640936571cb659 GIT binary patch literal 21152 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 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_3_Picture_3.jpeg b/raw/book/설계원칙-045-099_images/_page_3_Picture_3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..62fbb333c59e91e05f102a62e7027c4f3cb185ff GIT binary patch literal 16791 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

    ?B# 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 HoY(&c?3xTN literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_5_Picture_2.jpeg b/raw/book/설계원칙-045-099_images/_page_5_Picture_2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9be4ba37d9834b2aff0f1d0f99c0ea4a5659cb6c GIT binary patch literal 35002 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 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-045-099_images/_page_7_Picture_0.jpeg b/raw/book/설계원칙-045-099_images/_page_7_Picture_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..26027c0a6e4ef189e8cda76192cee6d7206c7445 GIT binary patch literal 36004 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 B2+{xm literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-100-121.md b/raw/book/설계원칙-100-121.md new file mode 100644 index 0000000..6570bd9 --- /dev/null +++ b/raw/book/설계원칙-100-121.md @@ -0,0 +1,629 @@ +# **Variations on an Arithmetic Theme** + +In this chapter we introduce the extremely powerful but potentially dangerous flexibility technique of predicate-dispatched *generic procedures*. We start out in the relatively calm waters of arithmetic, modulating the meanings of the operator symbols. + +We first generalize arithmetic to deal with symbolic algebraic expressions, and then to functions. We use a combinator system where the elements being combined are packages of arithmetic operations. + +But soon we want even more flexibility. So we invent dynamically extensible generic procedures, where the applicability of a handler is determined by predicates on the supplied arguments. This is very powerful and great fun. Using generic procedures to extend the arithmetic to operate on "differential objects," we get automatic differentiation with very little work! + +Predicate dispatch is pretty expensive, so we investigate ways to ameliorate that expense. In the process we invent a kind of tagged data, where a tag is just a way of memoizing the value of a predicate. To finish the chapter we demonstrate the power of generic procedures with the design of a simple, but easy to elaborate, adventure game. + +# **3.1 Combining arithmetics** + +Suppose we have a program that computes some useful numerical results. It depends on the meanings of the arithmetic operators that + +are referenced by the program text. These operators can be extended to work on things other than the numbers that were expected by the program. With these extensions the program may do useful things that were not anticipated when the program was written. A common pattern is a program that takes numerical weights and other arguments and makes a linear combination by adding up the weighted arguments. If the addition and multiplication operators are extended to operate on tuples of numbers as well as on the original numbers, the program can make linear combinations of vectors. This kind of extension can work because the set of arithmetic operators is a well-specified and coherent entity. Extensions of numerical programs with more powerful arithmetic can work, unless the new quantities do not obey the constraints that were assumed by the author of the program. For example, multiplication of matrices does not commute, so extension of a numerical program that depends on the fact that multiplication of numbers is commutative will not work. We will ignore this problem for now. + +#### **3.1.1 A simple ODE integrator** + +A differential equation is a description of how the state of a system changes as an independent variable is varied; this is called the *evolution* of the system's state. 1 We can approximate the evolution of a system's state by sampling the independent variable at various points and approximating the state change at each sample point. This process of approximation is called *numerical integration*. + +Let's investigate the generality of numerical operations in a numerical integrator for second-order ordinary differential equations. We will use an integrator that samples its independent variable at uniform intervals, each of which is called a *step*. Consider this equation: + +$$D^2x(t) = F(t, x(t))$$ + (3.1) + +The essential idea is that a discrete approximation to the second derivative of the unknown function is a linear combination of second derivatives of some previous steps. The particular coefficients are chosen by numerical analysis and are not of interest here. + +$$\frac{x(t+h) - 2x(t) + x(t-h)}{h^2} = \sum_{j=0}^{k} A(j)F(t-jh, x(t-jh))$$ +(3.2) + +where *h* is the step size and *A* is the array of magic coefficients. For example, Stormer's integrator of order 2 is + +$$x(t+h) - 2x(t) + x(t-h)$$ + +$$= \frac{h^2}{12} (13F(t, x(t)) - 2F(t-h, x(t-h)) + F(t-2h, x(t-2h)))$$ +(3.3) + +To use this to compute the future of *x* we write a program. The procedure returned by stormer-2 is an integrator for a given function and step size, that given a history of values of *x*, produces an estimate of the value of *x* at the next time, *x*(*t* + *h*). The procedures t and x extract previous times and values of *x* from the history: (x 0 history) returns *x*(*t*), (x 1 history) returns *x*(*t − h*), and (x 2 history) returns *x*(*t −* 2*h*). We access the time of a step from a history similarly: (t 1 history) returns *t − h*. + +``` +(define (stormer-2 F h) + (lambda (history) + (+ (* 2 (x 0 history)) + (* -1 (x 1 history)) + (* (/ (expt h 2) 12) + (+ (* 13 (F (t 0 history) (x 0 history))) + (* -2 (F (t 1 history) (x 1 history))) + (F (t 2 history) (x 2 history))))))) +``` + +The procedure returned by stepper takes a history and returns a new history advanced by *h* for the given integrator. + +``` +(define (stepper h integrator) + (lambda (history) + (extend-history (+ (t 0 history) h) + (integrator history) + history))) +``` + +The procedure stepper is used in the procedure evolver to produce a procedure step that will advance a history by one step. The step procedure is used in the procedure evolve that advances the history by a given number of steps of size *h*. We explicitly use specialized integer arithmetic here (the procedures named n:> and n:-) for counting steps. This will allow us to use different types of arithmetic for everything else without affecting simple counting. 2 + +``` +(define (evolver F h make-integrator) + (let ((integrator (make-integrator F h))) + (let ((step (stepper h integrator))) + (define (evolve history n-steps) + (if (n:> n-steps 0) + (evolve (step history) (n:- n-steps 1)) + history)) + evolve))) +``` + +A second-order differential equation like equation 3.1 generally needs two initial conditions to determine a unique trajectory: *x*(*t*0 ) and *x*(*t*0 ) are sufficient to get *x*(*t*) for all *t*. But the Stormer multistep integrator we are using requires three history values, *x*(*t*0 ), *x*(*t*0 *− h*), and *x*(*t*0 *−* 2*h*), to compute the next value *x*(*t*0 + *h*). So to evolve the trajectory with this integrator we must start with an initial history that has three past values of *x*. + +Consider the very simple differential equation: + +$$D^2x(t) + x(t) = 0$$ + +In the form shown in equation 3.1 the right-hand side is: + +``` +(define (F t x) (- x)) +``` + +Because all the solutions of this equation are linear combinations of sinusoids, we can get the simple sine function by initializing the history with three values of the sine function: + +``` +(define numeric-s0 + (make-initial-history 0 .01 (sin 0) (sin -.01) (sin -.02))) +``` + +where the procedure make-initial-history takes the following arguments: + +``` +(make-initial-history t h x(t) x(t − h) x(t − 2h)) +``` + +Using Scheme's built-in arithmetic, after 100 steps of size *h* = *.*01 we get a good approximation to sin(1): + +``` +(x 0 ((evolver F .01 stormer-2) numeric-s0 100)) +.8414709493275624 +(sin 1) +.8414709848078965 +``` + +#### **3.1.2 Modulating arithmetic operators** + +Let's consider the possibility of modulating what is meant by addition, multiplication, etc., for new data types unimagined by our example's programmer. Suppose we change our arithmetic operators to operate on and produce symbolic expressions rather than numerical values. This can be useful in debugging purely numerical calculations, because if we supply symbolic arguments we can examine the resulting symbolic expressions to make sure that the program is calculating what we intend it to. This can also be the basis of a partial evaluator for optimization of numerical programs. + +Here is one way to accomplish this goal. We introduce the idea of an *arithmetic package*. An arithmetic package, or just *arithmetic*, is a map from operator names to their operations (implementations). We can install an arithmetic in the user's read-eval-print environment to replace the default bindings of the operators named in the arithmetic with the arithmetic's implementations. + +The procedure make-arithmetic-1 generates a new arithmetic package. It takes a name for the new arithmetic, and an operationgenerator procedure that given an operator name constructs an *operation*, here a handler procedure, for that operator. The procedure make-arithmetic-1 calls the operation-generator procedure with each arithmetic operator, accumulating the results into a new arithmetic package. For symbolic arithmetic, the operation is implemented as a procedure that creates a symbolic expression by consing the operator name onto the list of its arguments. + +``` +(define symbolic-arithmetic-1 + (make-arithmetic-1 'symbolic + (lambda (operator) + (lambda args (cons operator args))))) +``` + +To use this newly defined arithmetic, we install it. This redefines the arithmetic operators to use this arithmetic: 3 + +``` +(install-arithmetic! symbolic-arithmetic-1) +``` + +install-arithmetic! changes the values of the user's global variables that are the names of the arithmetic operators defined in the arithmetic to their values in that arithmetic. For example, after this install: + +``` +(+ 'a 'b) +(+ a b) +(+ 1 2) +(+ 1 2) +``` + +Now we can observe the result of taking one step of the Stormer evolution: 4 5 + +``` +(pp (x 0 + ((evolver F 'h stormer-2) + (make-initial-history 't 'h 'xt 'xt-h 'xt-2h) + 1))) +(+ (+ (* 2 xt) (* -1 xt-h)) + (* (/ (expt h 2) 12) +``` + +``` +(+ (+ (* 13 (negate xt)) (* -2 (negate xt-h))) + (negate xt-2h)))) +``` + +We could easily produce simplified expressions by replacing the cons in symbolic-arithmetic-1 with an algebraic simplifier, and then we would have a symbolic manipulator. (We will explore algebraic simplification in section 4.2.) + +This transformation was ridiculously easy, and yet our original design didn't make any provisions for symbolic computation. We could just as easily add support for vector arithmetic, matrix arithmetic, etc. + +#### **Problems with redefining operators** + +The ability to redefine operators *after the fact* gives both extreme flexibility and ways to make whole new classes of bugs! (We anticipated such a problem in the evolver procedure and avoided it by using the special arithmetic operators n:> and n:- for counting steps.) + +There are more subtle problems. A program that depends on the exactness of operations on integers may not work correctly for inexact floating-point numbers. This is exactly the risk that comes with the evolution of biological or technological systems— some mutations will be fatal! On the other hand, some mutations will be extremely valuable. But that risk must be balanced against the cost of narrow and brittle construction. + +Indeed, it is probably impossible to prove very much about a program when the primitive procedures can be redefined, except that it will work when restricted to the types it was defined for. This is an easy but dangerous path for generalization. + +## **3.1.3 Combining arithmetics** + +The symbolic arithmetic cannot do numerical calculation, so we have broken our integration example by replacing the operator definitions. We really want an operator's action to depend on its arguments: for example, numerical addition for (+ 1 2) but + +building a list for (+ 'a 'b). Thus the arithmetic packages must be able to determine which handler is appropriate for the arguments tendered. + +#### **An improved arithmetic abstraction** + +By annotating each operation with an *applicability specification*, often shortened to just an *applicability*, we can combine different kinds of arithmetic. For example, we can combine symbolic and numeric arithmetic so that a combined operation can determine which implementation is appropriate for its arguments. + +An applicability specification is just a list of *cases*, each of which is a list of predicates, such as number? or symbolic?. A procedure is deemed applicable to a sequence of arguments if the arguments satisfy one of the cases—that is, if each predicate in the case is true of the corresponding argument. For example, for binary arithmetic operators, we would like the numeric operations to be applicable in just the case (number? number?) and the symbolic operations to be applicable in these cases: ((number? symbolic?) (symbolic? number?) (symbolic? symbolic?)). + +We use make-operation to make an operation that includes an applicability for the handler procedure, like this: + +``` +(define (make-operation operator applicability procedure) + (list 'operation operator applicability procedure)) +``` + +It is then possible to get the applicability for an operation: + +``` +(define (operation-applicability operation) + (caddr operation)) +``` + +We introduce an abstraction for writing applicability information for an operation. The procedure all-args takes two arguments, the first being the number of arguments that the operation accepts (its *arity*, as on page 26), and the second being a predicate that must be true of each argument. It returns an applicability specification that can be used to determine if the operation is applicable to the + +arguments supplied to it. In a numeric arithmetic, each operation takes numbers for each of its arguments. + +Using all-args we can implement an operation constructor for the simplest operations: + +``` +(define (simple-operation operator predicate procedure) + (make-operation operator + (all-args (operator-arity operator) + predicate) + procedure)) +``` + +We will also find it useful to have a *domain predicate* that is true for the objects (such as functions or matrices) that a given arithmetic's operations take as arguments—for example, number? for numeric arithmetic. To support this more elaborate idea we will create a constructor make-arithmetic for arithmetic packages. The procedure make-arithmetic is like make-arithmetic-1 (see page 71) but has additional arguments. + +``` +(make-arithmetic name + domain-predicate + base-arithmetic-packages + map-of-constant-name-to-constant + map-of-operator-name-to-operation) +``` + +An arithmetic package produced by make-arithmetic has a name that is useful for debugging. It has the domain predicate noted above. It has a list of arithmetic packages, called the *bases*, that the new arithmetic will be built from. In addition, the arithmetic will contain a set of named constants, and a set of operators along with their corresponding operations. The final two arguments are used to generate these sets. + +An example of the use of a base arithmetic is vectors. A vector is represented as an ordered sequence of coordinates: consequently an arithmetic on vectors is defined in terms of arithmetic on its coordinates. So the base arithmetic for a vector arithmetic is the appropriate arithmetic for the vector's coordinates. A vector arithmetic with numeric coordinates will use a numeric arithmetic as its base, while a vector arithmetic with symbolic coordinates will + +use a symbolic arithmetic as its base. For brevity, we often use the term "over" to specify the base, as in "vectors over numbers" or "vectors over symbols." + +The base arithmetics also determine the constants and operators that the derived arithmetic will define. The defined constants will be the union of the constants defined by the bases, and the defined operators will be the union of their operators. If there are no bases, then standard sets of constant and operator names will be defined. + +Using these new capabilities, we can define a numeric arithmetic with applicability information. Since numeric arithmetic is built on the Scheme substrate, the appropriate handler for the operator for Scheme number arguments is just the value of the operator symbol for the Scheme implementation. Also, certain symbols, such as the identity constants for addition and multiplication, are specially mapped. + +``` +(define numeric-arithmetic + (make-arithmetic 'numeric number? '() + (lambda (name) ;constant generator + (case name + ((additive-identity) 0) + ((multiplicative-identity) 1) + (else (default-object)))) + (lambda (operator) ;operation generator + (simple-operation operator number? + (get-implementation-value + (operator->procedure-name operator)))))) +``` + +The last two lines of this code find the procedure defined by the Scheme implementation that is named by the operator. 6 + +We can similarly write the symbolic-extender constructor to construct a symbolic arithmetic based on a given arithmetic. + +``` +(define (symbolic-extender base-arithmetic) + (make-arithmetic 'symbolic symbolic? (list base-arithmetic) + (lambda (name base-constant) ;constant generator + base-constant) + (let ((base-predicate + (arithmetic-domain-predicate base-arithmetic))) + (lambda (operator base-operation) ;operation generator + (make-operation operator +``` + +``` +(any-arg (operator-arity operator) + symbolic? + base-predicate) +(lambda args + (cons operator args))))))) +``` + +One difference between this and the numeric arithmetic is that the symbolic arithmetic is applicable whenever *any* argument is a symbolic expression. 7 This is indicated by the use of any-arg rather than all-args; any-arg matches if at least one of the arguments satisfies the predicate passed as the second argument, and all the other arguments satisfy the predicate passed as the third argument. 8 Also notice that this symbolic arithmetic is based on a provided base-arithmetic, which will allow us to build a variety of such arithmetics. + +Applicability specifications are not used as guards on the handlers: they do not prevent the application of a handler to the wrong arguments. The applicability specifications are used only to distinguish among the possible operations for an operator when arithmetics are combined, as explained below. + +#### **A combinator for arithmetics** + +The symbolic and numeric arithmetics are of the same shape, by construction. The symbolic-extender procedure produces an arithmetic with the same operators as the base arithmetic it is given. Making a combinator language for building composite arithmetics from parts might be a good approach. + +The procedure add-arithmetics, below, is a combinator for arithmetics. It makes a new arithmetic whose domain predicate is the disjunction of the given arithmetics' domain predicates, and each of whose operators is mapped to the union of the operations for the given arithmetics. 9 + +``` +(define (add-arithmetics . arithmetics) + (add-arithmetics* arithmetics)) +(define (add-arithmetics* arithmetics) +``` + +``` +(if (n:null? (cdr arithmetics)) + (car arithmetics) ;only one arithmetic + (make-arithmetic 'add + (disjoin* + (map arithmetic-domain-predicate + arithmetics)) + arithmetics + constant-union + operation-union))) +``` + +The third argument to make-arithmetic is a list of the arithmetic packages being combined. The arithmetic packages must be compatible in that they specify operations for the same named operators. The fourth argument is constant-union, which combines multiple constants. Here this selects one of the argument constants for use in the combined arithmetic; later we will elaborate on this. 10 + +``` +(define (constant-union name . constants) + (let ((unique + (remove default-object? + (delete-duplicates constants eqv?)))) + (if (n:pair? unique) + (car unique) + (default-object)))) +``` + +The last argument is operation-union, which constructs the operation for the named operator in the resulting arithmetic. An operation is applicable if it is applicable in any of the arithmetics that were combined. + +``` +(define (operation-union operator . operations) + (operation-union* operator operations)) +(define (operation-union* operator operations) + (make-operation operator + (applicability-union* + (map operation-applicability operations)) + (lambda args + (operation-union-dispatch operator + operations + args)))) +``` + +The procedure operation-union-dispatch must determine the operation to use based on the arguments supplied. It chooses the operation from the given arithmetics that is appropriate to the given arguments and applies it to the arguments. If more than one of the given arithmetics has an applicable operation, the operation from the first arithmetic in the arguments to add-arithmetics is chosen. + +``` +(define (operation-union-dispatch operator operations args) + (let ((operation + (find (lambda (operation) + (is-operation-applicable? operation args)) + operations))) + (if (not operation) + (error "Inapplicable operation:" operator args)) + (apply-operation operation args))) +``` + +A common pattern is to combine a base arithmetic with an extender on that arithmetic. The combination of numeric arithmetic and a symbolic arithmetic built on numeric arithmetic is such a case. So we provide an abstraction for that pattern: + +``` +(define (extend-arithmetic extender base-arithmetic) + (add-arithmetics base-arithmetic + (extender base-arithmetic))) +``` + +We can use extend-arithmetic to combine the numeric arithmetic and the symbolic arithmetic. Since the applicability cases are disjoint—all numbers for numeric arithmetic and at least one symbolic expression for symbolic arithmetic—the order of arguments to add-arithmetics is irrelevant here, except for possible performance issues. + +``` +(define combined-arithmetic + (extend-arithmetic symbolic-extender numeric-arithmetic)) +(install-arithmetic! combined-arithmetic) +``` + +Let's try the composite arithmetic: + +``` +(+ 1 2) +3 +``` + +``` +(+ 1 'a) +(+ 1 a) +(+ 'a 2) +(+ a 2) +(+ 'a 'b) +(+ a b) +``` + +The integrator still works numerically (compare page 70): + +``` +(define numeric-s0 + (make-initial-history 0 .01 (sin 0) (sin -.01) (sin -.02))) +(x 0 ((evolver F .01 stormer-2) numeric-s0 100)) +.8414709493275624 +``` + +It works symbolically (compare page 72): + +``` +(pp (x 0 + ((evolver F 'h stormer-2) + (make-initial-history 't 'h 'xt 'xt-h 'xt-2h) + 1))) +(+ (+ (* 2 xt) (* -1 xt-h)) + (* (/ (expt h 2) 12) + (+ (+ (* 13 (negate xt)) (* -2 (negate xt-h))) + (negate xt-2h)))) +``` + +And it works in combination, with numeric history but symbolic step size h: + +``` +(pp (x 0 ((evolver F 'h stormer-2) numeric-s0 1))) +(+ 9.999833334166664e-3 + (* (/ (expt h 2) 12) + -9.999750002487318e-7)) +``` + +Notice the power here. We have combined code that can do symbolic arithmetic and code that can do numeric arithmetic. We have created a system that can do arithmetic that depends on both abilities. This is not just the union of the two abilities— it is the cooperation of two mechanisms to solve a problem that neither could solve by itself. + +#### **3.1.4 Arithmetic on functions** + +Traditional mathematics extends arithmetic on numerical quantities to many other kinds of objects. Over the centuries "arithmetic" has been extended to complex numbers, vectors, linear transformations and their representations as matrices, etc. One particularly revealing extension is to functions. We can combine functions of the same type using arithmetic operators: + +``` +(f + g)(x) = f (x) + g(x) +(f − g)(x) = f (x) − g(x) +(fg)(x) = f (x)g(x) +(f/g)(x) = f (x)/g(x) +⋮ +``` + +The functions that are combined must have the same domain and codomain, and an arithmetic must be defined on the codomain. + +The extension to functions is not hard. Given an arithmetic package for the codomain of the functions that we wish to combine, we can make an arithmetic package that implements the function arithmetic, assuming that functions are implemented as procedures. + +``` +(define (pure-function-extender codomain-arithmetic) + (make-arithmetic 'pure-function function? + (list codomain-arithmetic) + (lambda (name codomain-constant) ; *** see below + (lambda args codomain-constant)) + (lambda (operator codomain-operation) + (simple-operation operator function? + (lambda functions + (lambda args + (apply-operation codomain-operation + (map (lambda (function) + (apply function args)) + functions)))))))) +``` + +Notice that the constant generator (with comment \*\*\*) must produce a constant function for each codomain constant. For example, the additive identity for functions must be the function of any number of arguments that returns the codomain additive + +identity. Combining a functional arithmetic with the arithmetic that operates on the codomains makes a useful package: + +``` +(install-arithmetic! + (extend-arithmetic pure-function-extender + numeric-arithmetic)) +((+ cos sin) 3) +-.8488724885405782 +(+ (cos 3) (sin 3)) +-.8488724885405782 +``` + +By building on combined-arithmetic we can get more interesting results: + +``` +(install-arithmetic! + (extend-arithmetic pure-function-extender + combined-arithmetic)) +((+ cos sin) 3) +-.8488724885405782 +((+ cos sin) 'a) +(+ (cos a) (sin a)) +(* 'b ((+ cos sin) (+ (+ 1 2) 'a))) +(* b (+ (cos (+ 3 a)) (sin (+ 3 a)))) +``` + +The mathematical tradition also allows one to mix numerical quantities with functions by treating the numerical quantities as constant functions of the same type as the functions they will be combined with. + +$$(f+1)(x) = f(x) + 1 (3.4)$$ + +We can implement the coercion of numerical quantities to constant functions quite easily, by minor modifications to the procedure pure-function-extender: + +``` +(define (function-extender codomain-arithmetic) + (let ((codomain-predicate + (arithmetic-domain-predicate codomain-arithmetic))) +``` + +``` +(make-arithmetic 'function + (disjoin codomain-predicate function?) + (list codomain-arithmetic) + (lambda (name codomain-constant) + codomain-constant) + (lambda (operator codomain-operation) + (make-operation operator + (any-arg (operator-arity operator) + function? + codomain-predicate) + (lambda things + (lambda args + (apply-operation codomain-operation + (map (lambda (thing) + ;; here is the coercion: + (if (function? thing) + (apply thing args) + thing)) + things))))))))) +``` + +To allow the coercion of codomain quantities, such as numbers, to constant functions, the domain of the new function arithmetic must contain both the functions and the elements of the codomain of the functions (the possible values of the functions). The operator implementation is applicable if any of the arguments is a function; and functions are applied to the arguments that are given. Note that the constant generator for the make-arithmetic doesn't need to rewrite the codomain constants as functions, since the constants can now be used directly. + +With this version we can + +``` +(install-arithmetic! + (extend-arithmetic function-extender combined-arithmetic)) +((+ 1 cos) 'a) +(+ 1 (cos a)) +(* 'b ((+ 4 cos sin) (+ (+ 1 2) 'a))) +(* b (+ 4 (cos (+ 3 a)) (sin (+ 3 a)))) +``` + +This raises an interesting problem: we have symbols, such as a and b, that represent literal numbers, but nothing to represent literal functions. For example, if we write + +``` +(* 'b ((+ 'c cos sin) (+ 3 'a))) +``` + +our arithmetic will treat c as a literal number. But we might wish to have c be a literal function that combines as a function. It's difficult to do this with our current design, because c carries no type information, and the context is insufficient to distinguish usages. + +But we can make a literal function that has no properties except for a name. Such a function just attaches its name to the list of its arguments. + +``` +(define (literal-function name) + (lambda args + (cons name args))) +``` + +With this definition we can have a literal function c correctly combine with other functions: + +``` +(* 'b ((+ (literal-function 'c) cos sin) (+ (+ 1 2) 'a))) +(* b (+ (+ (c (+ 3 a)) (cos (+ 3 a))) (sin (+ 3 a)))) +``` + +This is a narrow solution that handles a useful case. + +#### **3.1.5 Problems with combinators** + +The arithmetic structures we have been building up to now are an example of the use of combinators to build complex structures by combining simpler ones. But there are some serious drawbacks to building this system using combinators. First, some properties of the structure are determined by the means of combination. For example, we pointed out that add-arithmetics prioritized its arguments, such that their order can matter. Second, the layering implicit in this design, such that the codomain arithmetic must be constructed prior to the function arithmetic, means that it's impossible to augment the codomain arithmetic after the function arithmetic has been constructed. Finally, we might wish to define an arithmetic for functions that return functions. This cannot be done in a general way within this framework, without introducing another mechanism for self reference, and self reference is cumbersome to arrange. + +Combinators are powerful and useful, but a system built of combinators is not very flexible. One problem is that the shapes of the parts must be worked out ahead of time: the generality that will be available depends on the detailed plan for the shapes of the parts, and there must be a localized plan for how the parts are combined. This is not a problem for a well-understood domain, such as arithmetic, but it is not appropriate for open-ended construction. In section 3.2 we will see how to add new kinds of arithmetic incrementally, without having to decide where they go in a hierarchy, and without having to change the existing parts that already work. + +Other problems with combinators are that the behavior of any part of a combinator system must be independent of its context. A powerful source of flexibility that is available to a designer is to build systems that *do* depend upon their context. By varying the context of a system we can obtain variation of the behavior. This is quite dangerous, because it may be hard to predict how a variation will behave. However, carefully controlled variations can be useful. + +# **Exercise 3.1: Warmup with boolean arithmetic** + +In digital design the boolean operations *and*, *or*, and *not* are written with the operators \*, +, and -, respectively. + +There is a Scheme predicate boolean? that is true only of #t and #f. Use this to make a boolean arithmetic package that can be combined with the arithmetics we have. Note that all other arithmetic operators are undefined for booleans, so the appropriate result of applying something like cos to a boolean is to report an error. + +The following template could help get you started: + +``` +(define boolean-arithmetic + (make-arithmetic 'boolean boolean? '() + (lambda (name) + (case name + ((additive-identity) #f) + ((multiplicative-identity) #t) +``` + +``` +(else (default-object)))) +(lambda (operator) + (let ((procedure + (case operator + ((+) <...>) + ((-) <...>) + ((*) <...>) + ((negate) <...>) + (else + (lambda args + (error "Operator undefined in Boolean" + operator)))))) + (simple-operation operator boolean? procedure))))) +``` + +In digital design the operator - is typically used only as a unary operator and is realized as negate. When an arithmetic is installed, the binary operators +, \*, -, and / are generalized to be *n*-ary operators. + +The unary application (- *operand*) is transformed by the installer into (negate *operand*). Thus to make - work, you will need to define the unary boolean operation for the operator negate. + +## **Exercise 3.2: Vector arithmetic** + +We will make and install an arithmetic package on geometric vectors. This is a big assignment that will bring to the surface many of the difficulties and inadequacies of the system we have developed so far. + +**a.** We will represent a vector as a Scheme vector of numerical quantities. The elements of a vector are coordinates relative to some Cartesian axes. There are a few issues here. Addition (and subtraction) is defined only for vectors of the same dimension, so your arithmetic must know about dimensions. First, make an arithmetic that defines only addition, negation, and subtraction of vectors over a base arithmetic of operations applicable to the coordinates of vectors. Applying any other operation to a vector should report an error. Hint: The following procedures will be helpful: + +``` +(define (vector-element-wise element-procedure) + (lambda vecs ; Note: this takes multiple vectors + (ensure-vector-lengths-match vecs) + (apply vector-map element-procedure vecs))) +(define (ensure-vector-lengths-match vecs) + (let ((first-vec-length (vector-length (car vecs)))) + (if (any (lambda (v) + (not (n:= (vector-length v) + first-vec-length))) + vecs) + (error "Vector dimension mismatch:" vecs)))) +``` + +The use of apply here is subtle. One way to think about it is to imagine that the language supported an ellipsis like this: + +``` +(define (vector-element-wise element-procedure) + (lambda (v1 v2 ...) + (vector-map element-procedure v1 v2 ...))) +``` + +Build the required arithmetic and show that it works for numerical vectors and for vectors with mixed numerical and symbolic coordinates. + +**b.** Your vector addition required addition of the coordinates. The coordinate addition procedure could be the value of the + operator that will be made available in the user environment by install-arithmetic!, or it could be the addition operation from the base arithmetic of your vector extension. Either of these would satisfy many tests, and using the installed addition may actually be more general. Which did you use? Show how to implement the other choice. How does this choice affect your ability to make future extensions to this system? Explain your reasoning. + +Hint: A nice way to control the interpretation of operators in a procedure is to provide the procedure to use for each operator as arguments to a "maker procedure" that returns the procedure needed. For example, to control the arithmetic operations used in vector-magnitude one might write: + +``` +(define (vector-magnitude-maker + * sqrt) + (let ((dot-product (dot-product-maker + *))) + (define (vector-magnitude v) + (sqrt (dot-product v v))) + vector-magnitude)) +``` + +- **c.** What shall we do about multiplication? First, for two vectors it is reasonable to define multiplication to be their dot product. But there is a bit of a problem here. You need to be able to use both the addition and multiplication operations, perhaps from the arithmetic on the coordinates. This is not hard to solve. Modify your vector arithmetic to define multiplication of two vectors as their dot product. Show that your dot product works. +- **d.** Add vector magnitude to your vector arithmetic, extending the numerical operator magnitude to give the length of a vector. The code given above is most of the work! +- **e.** Multiplication of a vector by a scalar or multiplication of a scalar by a vector should produce the scalar product (the vector with each coordinate multiplied by the scalar). So multiplication can mean either dot product or scalar product, depending on the types of its arguments. Modify your vector arithmetic to make this work. Show that your vector arithmetic can handle both dot product and scalar product. Hint: The operation-union procedure on page 78 enables a very elegant way to solve this problem. + +## **Exercise 3.3: Ordering of extensions** + +Consider two possible orderings for combining your vector extension (exercise 3.2) with the existing arithmetics: + +``` +(define vec-before-func + (extend-arithmetic + function-extender + (extend-arithmetic vector-extender combined-arithmetic))) +(define func-before-vec +``` \ No newline at end of file diff --git a/raw/book/설계원칙-122-139.md b/raw/book/설계원칙-122-139.md new file mode 100644 index 0000000..a21ef28 --- /dev/null +++ b/raw/book/설계원칙-122-139.md @@ -0,0 +1,592 @@ +``` +(extend-arithmetic + vector-extender + (extend-arithmetic function-extender combined-arithmetic))) +``` + +How does the ordering of extensions affect the properties of the resulting arithmetic? The following procedure makes points on the unit circle: + +``` +(define (unit-circle x) + (vector (sin x) (cos x))) +``` + +If we execute each of the following expressions in environments resulting from installing vec-before-func and func-before-vec: + +``` +((magnitude unit-circle) 'a) +((magnitude (vector sin cos)) 'a) +``` + +The result (unsimplified) should be: + +``` +(sqrt (+ (* (sin a) (sin a)) (* (cos a) (cos a)))) +``` + +However, each of these expressions fails with one of the two orderings of the extensions. Is it possible to make an arithmetic for which both evaluate correctly? Explain. + +# **3.2 Extensible generic procedures** + +Systems built by combinators, as in section 3.1, result in beautiful diamond-like systems. This is sometimes the right idea, and we will see it arise again, but it is very hard to add to a diamond. If a system is built as a ball of mud, it is easy to add more mud. 11 + +One organization for a ball of mud is a system erected on a substrate of extensible generic procedures. Modern dynamically typed programming languages, such as Lisp, Scheme, and Python, usually have built-in arithmetic that is generic over a variety of types of numerical quantities, such as integers, floats, rationals, and complex numbers [115, 64, 105]. But systems built on these languages are usually not easily extensible after the fact. + +The problems we indicated in section 3.1.5 are the result of using the combinator add-arithmetics. To solve these problems we will abandon that combinator. However, the arithmetic package abstraction is still useful, as is the idea of an extender. We will build an arithmetic package in which the operations use generic procedures that can be dynamically augmented with new behavior. We can then extend the generic arithmetic and add the extensions to the generic arithmetic. 12 + +We will start by implementing generic procedures, which are procedures that can be dynamically extended by adding handlers after the generic procedures are defined. A generic procedure is a dispatcher combined with a set of *rules*, each of which describes a handler that is appropriate for a given set of arguments. Such a rule combines a handler with its applicability. + +Let's examine how this might work, by defining a generic procedure named plus that works like addition with numeric and symbolic quantities: + +``` +(define plus (simple-generic-procedure 'plus 2 #f)) +(define-generic-procedure-handler plus + (all-args 2 number?) + (lambda (a b) (+ a b))) +(define-generic-procedure-handler plus + (any-arg 2 symbolic? number?) + (lambda (a b) (list '+ a b))) +(plus 1 2) +3 +(plus 1 'a) +(+ 1 a) +(plus 'a 2) +(+ a 2) +(plus 'a 'b) +(+ a b) +``` + +The procedure simple-generic-procedure takes three arguments: The first is an arbitrary name to identify the procedure when debugging; the second is the procedure's arity. The third argument is used to provide a default handler; if none is supplied (indicated by #f), then if no specific handler is applicable an error is signaled. Here plus is bound to the new generic procedure returned by simple-generic-procedure. It is a Scheme procedure that can be called with the specified number of arguments. + +The procedure define-generic-procedure-handler adds a rule to an existing generic procedure. Its first argument is the generic procedure to be extended; the second argument is an applicability specification (as on page 73) for the rule being added; and the third argument is the handler for arguments that satisfy that specification. + +``` +(define-generic-procedure-handler generic-procedure + applicability + handler-procedure) +``` + +It is often necessary to specify a rule in which different arguments are of different types. For example, to make a vector arithmetic package we need to specify the interpretation of the \* operator. If both arguments are vectors, the appropriate handler computes the dot product. If one argument is a scalar and the other is a vector, then the appropriate handler scales the vector elements by the scalar. The applicability argument is the means by which this is accomplished. + +The simple-generic-procedure constructor we used above to make the generic procedure plus is created with the procedure generic-procedure-constructor + +``` +(define simple-generic-procedure + (generic-procedure-constructor make-simple-dispatch-store)) +``` + +where make-simple-dispatch-store is a procedure that encapsulates a strategy for saving, retrieving, and choosing a handler. + +The generic-procedure-constructor takes a dispatch-store constructor and produces a generic-procedure constructor that itself takes three arguments—a name that is useful in debugging, an arity, and a default handler to be used if there are no applicable handlers. If the default handler argument is #f, the default handler signals an error: + +``` +((generic-procedure-constructor dispatch-store-constructor) + name + arity + default-handler) +``` + +The reason why generic procedures are made in this way is that we will need families of generic procedures that differ in the choice of dispatch store. + +In section 3.2.3, we will see one way to implement this mechanism. But first let's see how to use it. + +#### **3.2.1 Generic arithmetic** + +We can use this new generic-procedure mechanism to build arithmetic packages in which the operators map to operations that are implemented as generic procedures. This will allow us to make self-referential structures. For example, we might want to make a generic arithmetic that includes vector arithmetic where both the vectors and the components of a vector are manipulated by the same generic procedures. We could not build such a structure using just add-arithmetics introduced earlier. + +``` +(define (make-generic-arithmetic dispatch-store-maker) + (make-arithmetic 'generic any-object? '() + constant-union + (let ((make-generic-procedure + (generic-procedure-constructor + dispatch-store-maker))) + (lambda (operator) + (simple-operation operator + any-object? + (make-generic-procedure + operator +``` + +``` +(operator-arity operator) +#f)))))) +``` + +The make-generic-arithmetic procedure creates a new arithmetic. For each arithmetic operator, it constructs an operation that is applicable to any arguments and is implemented by a generic procedure. (The predicate any-object? is true of anything.) We can install this arithmetic in the usual way. + +But first, let's define some handlers for the generic procedures. It's pretty simple to do now that we have the generic arithmetic object. For example, we can grab the operations and constants from any already-constructed arithmetic. + +``` +(define (add-to-generic-arithmetic! generic-arithmetic + arithmetic) + (add-generic-arith-constants! generic-arithmetic + arithmetic) + (add-generic-arith-operations! generic-arithmetic + arithmetic)) +``` + +This takes a generic arithmetic package and an ordinary arithmetic package with the same operators. It merges constants into the generic arithmetic using constant-union. And for each operator of the given arithmetic it adds a handler to the corresponding generic procedure. + +Adding a handler for a particular operator uses the standard generic procedure mechanism, extracting the necessary applicability and procedure from the arithmetic's operation. + +``` +(define (add-generic-arith-operations! generic-arithmetic + arithmetic) + (for-each + (lambda (operator) + (let ((generic-procedure + (simple-operation-procedure + (arithmetic-operation operator + generic-arithmetic))) + (operation + (arithmetic-operation operator arithmetic))) + (define-generic-procedure-handler + generic-procedure + (operation-applicability operation) +``` + +``` +(operation-procedure operation)))) +(arithmetic-operators arithmetic))) +``` + +The add-generic-arith-operations! procedure finds, for each operator in the given arithmetic, the generic procedure that must be augmented. It then defines a handler for that generic procedure that is the handler for that operator in the given arithmetic, using the applicability for that handler in the given arithmetic. + +The code for adding the constants from an arithmetic to the generic arithmetic is similar. For each constant name in the generic arithmetic it finds the entry in the association of names to constant values in the generic arithmetic. It then replaces the constant value with the constant-union of the existing constant and the constant it got for that same name from the given arithmetic. + +``` +(define (add-generic-arith-constants! generic-arithmetic + arithmetic) + (for-each + (lambda (name) + (let ((binding + (arithmetic-constant-binding name + generic-arithmetic)) + (element + (find-arithmetic-constant name arithmetic))) + (set-cdr! binding + (constant-union name + (cdr binding) + element)))) + (arithmetic-constant-names generic-arithmetic))) +``` + +### **Fun with generic arithmetics** + +We can add many arithmetics to a generic arithmetic to give it interesting behavior: + +``` +(let ((g + (make-generic-arithmetic make-simple-dispatch-store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (add-to-generic-arithmetic! g + (function-extender numeric-arithmetic)) + (add-to-generic-arithmetic! g + (symbolic-extender numeric-arithmetic)) + (install-arithmetic! g)) +``` + +This produces a generic arithmetic that combines numeric arithmetic with symbolic arithmetic over numeric arithmetic and function arithmetic over numeric arithmetic: + +``` +(+ 1 3 'a 'b) +(+ (+ 4 a) b) +``` + +And we can even run some more complex problems, as on page 79: + +``` +(pp (x 0 ((evolver F 'h stormer-2) numeric-s0 1))) +(+ 9.999833334166664e-3 + (* (/ (expt h 2) 12) + -9.999750002487318e-7)) +``` + +As before, we can mix symbols and functions: + +``` +(* 'b ((+ cos sin) 3)) +(* b -.8488724885405782) +``` + +but the following will signal an error, trying to add the symbolic quantities (cos a) and (sin a) as numbers: + +``` +(* 'b ((+ cos sin) 'a)) +``` + +We get this error because cos and sin are numeric operators, like +. Since we have symbolic arithmetic over numeric arithmetic, these operators are extended so that for symbolic input, here a, they produce symbolic outputs, (cos a) and (sin a). We also added function arithmetic over numeric arithmetic, so if functions are numerically combined (here by +) their outputs may be combined only if the outputs are numbers. But the symbolic results cannot be added numerically. This is a consequence of the way we built the arithmetic g. + +But there is magic in generic arithmetic. It can be closed: all extensions to the generic arithmetic can be made over the generic arithmetic! + +``` +(let ((g + (make-generic-arithmetic make-simple-dispatch-store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g symbolic-extender) +``` + +``` +(extend-generic-arithmetic! g function-extender) +(install-arithmetic! g)) +``` + +Here we use a new procedure extend-generic-arithmetic! that captures a common pattern. + +``` +(define (extend-generic-arithmetic! generic-arithmetic + extender) + (add-to-generic-arithmetic! generic-arithmetic + (extender generic-arithmetic))) +``` + +Now we can use complex mixed expressions, because the functions are defined over the generic arithmetic: + +``` +(* 'b ((+ 'c cos sin) (+ 3 'a))) +(* b (+ (+ c (cos (+ 3 a))) (sin (+ 3 a)))) +``` + +We can even use functions that return functions: + +``` +(((+ (lambda (x) (lambda (y) (cons x y))) + (lambda (x) (lambda (y) (cons y x)))) + 3) +4) +(+ (3 . 4) (4 . 3)) +``` + +So perhaps we have achieved nirvana? + +## **3.2.2 Construction depends on order!** + +Unfortunately, there is a severe dependence on the order in which rules are added to the generic procedures. This is not surprising, because the construction of the generic procedure system is by assignment. We can see this by changing the order of construction: + +``` +(let ((g + (make-generic-arithmetic make-simple-dispatch-store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g function-extender) ;* + (extend-generic-arithmetic! g symbolic-extender) ;* + (install-arithmetic! g)) +``` + +and then we will find that the example + +``` +(* 'b ((+ 'c cos sin) (+ 3 'a))) +``` + +which worked in the previous arithmetic, fails because the symbolic arithmetic captures (+ 'c cos sin) to produce a symbolic expression, which is not a function that can be applied to (+ 3 a). The problem is that the applicability of the symbolic operation for + accepts arguments with at least one symbolic argument and other arguments from the domain predicate of the base. But the symbolic arithmetic was created over the generic arithmetic as a base, and the domain predicate of a generic arithmetic accepts anything! There is also a function operation for + that is applicable to the same arguments, but it has not been chosen because of the accidental ordering of the extensions. Unfortunately, the choice of rule is ambiguous. It would be better to not have more than one applicable operation. + +One way to resolve this problem is to restrict the symbolic quantities to represent numbers. We can do this by building our generic arithmetic so that the symbolic arithmetic is over the numeric arithmetic, as we did on page 92, rather than over the entire generic arithmetic: + +``` +(let ((g + (make-generic-arithmetic make-simple-dispatch-store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g function-extender) + (add-to-generic-arithmetic! g + (symbolic-extender numeric-arithmetic)) + (install-arithmetic! g)) +``` + +This works, independent of the ordering, because there is no ambiguity in the choice of rules. So now the 'c will be interpreted as a constant to be coerced to a constant function by the function extender. + +``` +(* 'b ((+ 'c cos sin) (+ 3 'a))) +(* b (+ (+ c (cos (+ 3 a))) (sin (+ 3 a)))) +``` + +Unfortunately, we may want to have symbolic expressions over other quantities besides numbers. We cannot yet implement a general solution to this problem. But if we really want a literal function named c, we can use literal-function as we did earlier: + +``` +(* 'b ((+ (literal-function 'c) cos sin) (+ 3 'a))) +(* b (+ (+ (c (+ 3 a)) (cos (+ 3 a))) (sin (+ 3 a)))) +``` + +This will work independent of the order of construction of the generic arithmetic. + +With this mechanism we are now in a position to evaluate the Stormer integrator with a literal function: + +``` +(pp (x 0 ((evolver (literal-function 'F) 'h stormer-2) + (make-initial-history 't 'h 'xt 'xt-h 'xt-2h) + 1)) +(+ (+ (* 2 xt) (* -1 xt-h)) + (* (/ (expt h 2) 12) + (+ (+ (* 13 (f t xt)) + (* -2 (f (- t h) xt-h))) + (f (- t (* 2 h)) xt-2h)))) +``` + +This is pretty ugly, and it would be worse if we looked at the output of two integration steps. But it is interesting to look at the result of simplifying a two-step integration. Using a magic symbolicexpression simplifier we get a pretty readable expression. This can be useful for debugging a numerical process. + +``` +(+ (* 2 (expt h 2) (f t xt)) + (* -1/4 (expt h 2) (f (+ (* -1 h) t) xt-h)) + (* 1/6 (expt h 2) (f (+ (* -2 h) t) xt-2h)) + (* 13/12 + (expt h 2) + (f (+ h t) + (+ (* 13/12 (expt h 2) (f t xt)) + (* -1/6 (expt h 2) (f (+ (* -1 h) t) xt-h)) + (* 1/12 (expt h 2) (f (+ (* -2 h) t) xt-2h)) + (* 2 xt) + (* -1 xt-h)))) + (* 3 xt) + (* -2 xt-h)) +``` + +For example, notice that there are only four distinct top-level calls to the acceleration function f. The second argument to the fourth top-level call uses three calls to f that have already been computed. If we eliminate common subexpressions we get: + +``` +(let* ((G84 (expt h 2)) (G85 (f t xt)) (G87 (* -1 h)) + (G88 (+ G87 t)) (G89 (f G88 xt-h)) (G91 (* -2 h)) + (G92 (+ G91 t)) (G93 (f G92 xt-2h))) + (+ (* 2 G84 G85) + (* -1/4 G84 G89) + (* 1/6 G84 G93) + (* 13/12 G84 + (f (+ h t) + (+ (* 13/12 G84 G85) + (* -1/6 G84 G89) + (* 1/12 G84 G93) + (* 2 xt) + (* -1 xt-h)))) + (* 3 xt) + (* -2 xt-h))) +``` + +Here we clearly see that there are only four distinct calls to f. Though each integration step in the basic integrator makes three calls to f, the two steps overlap on two intermediate calls. While this is obvious for such a simple example, we see how symbolic evaluation might help in understanding a numerical computation. + +#### **3.2.3 Implementing generic procedures** + +We have used generic procedures to do amazing things. But how do we make such a thing work? + +### **Making constructors for generic procedures** + +On page 89 we made a simple generic procedure constructor: + +``` +(define simple-generic-procedure + (generic-procedure-constructor make-simple-dispatch-store)) +``` + +The procedure generic-procedure-constructor is given a "dispatch strategy" procedure; it returns a generic-procedure constructor that takes a name, an arity, and a default-handler specification. When this procedure is called with these three arguments it returns a generic procedure that it associates with a newly constructed metadata store for that procedure, which holds the name, the arity, an instance of the dispatch strategy, and the + +default handler, if any. The dispatch-strategy instance will maintain the handlers, their applicabilities, and the mechanism for deciding which handler to choose for given arguments to the generic procedure. + +The code that implements generic-procedure-constructor is: + +``` +(define (generic-procedure-constructor dispatch-store-maker) + (lambda (name arity default-handler) + (let ((metadata + (make-generic-metadata + name arity (dispatch-store-maker) + (or default-handler + (error-generic-procedure-handler name))))) + (define (the-generic-procedure . args) + (generic-procedure-dispatch metadata args)) + (set-generic-procedure-metadata! the-generic-procedure + metadata) + the-generic-procedure))) +``` + +This implementation uses the-generic-procedure, an ordinary Scheme procedure, to represent the generic procedure, and a metadata store (for rules, etc.) that determines the procedure's behavior. This store is associated with the generic procedure using a "sticky note" (as on page 28) and can later be obtained by calling generic-procedure-metadata. This allows procedures such as define-generic-procedure-handler to modify the metadata of a given generic procedure. + +The argument to generic-procedure-constructor is a procedure that creates a dispatch store for saving and retrieving handlers. The dispatch store encapsulates the strategy for choosing a handler. + +Here is the simple dispatch-store constructor we have used so far. The dispatch store is implemented as a message-accepting procedure: + +``` +(define (make-simple-dispatch-store) + (let ((rules '()) (default-handler #f)) + (define (get-handler args) + ;; body will be shown in text below. + ...) + (define (add-handler! applicability handler) +``` + +``` +;; body will be shown in text below. + ...) +(define (get-default-handler) default-handler) +(define (set-default-handler! handler) + (set! default-handler handler)) +(lambda (message) ; the simple dispatch store + (case message + ((get-handler) get-handler) + ((add-handler!) add-handler!) + ((get-default-handler) get-default-handler) + ((set-default-handler!) set-default-handler!) + ((get-rules) (lambda () rules)) + (else (error "Unknown message:" message)))))) +``` + +The simple dispatch store just maintains a list of the rules, each of which pairs an applicability with a handler. When the gethandler internal procedure is called with arguments for the generic procedure, it scans the list sequentially for a handler whose applicability is satisfied by the arguments tendered; it returns the handler, or #f if it doesn't find one: + +``` +(define (get-handler args) + (let ((rule + (find (lambda (rule) + (predicates-match? (car rule) args)) + rules))) + (and rule (cdr rule)))) +``` + +There are many possible strategies for choosing handlers to run. The above code returns the first applicable handler in the list. Another strategy is to return all applicable handlers. If more than one handler is applicable, perhaps all should be tried (in parallel?) and the results compared! Passing a dispatch-store constructor as an argument to generic-procedure-constructor allows the strategy to be chosen when the generic-procedure constructor is created, rather than being hard-coded into the implementation. + +#### **Adding handlers to generic procedures** + +The handler definition procedure (see below) adds new rules by calling the internal procedure add-handler of the dispatch store. + +For make-simple-dispatch-store above, add-handler adds the new rule to the front of the list of rules. (But if there was already a rule for handling that applicability, it just replaces the handler.) + +``` +(define (add-handler! applicability handler) + (for-each (lambda (predicates) + (let ((p (assoc predicates rules))) + (if p + (set-cdr! p handler) + (set! rules + (cons (cons predicates handler) + rules))))) + applicability)) +``` + +The define-generic-procedure-handler procedure uses the metadata table to get the metadata record for the generic procedure. It asks the dispatch store for the add-handler! procedure and uses that procedure to add a rule to the metadata that associates the applicability with the handler. The dispatch-store instance is retrieved from the metadata of the generic procedure by genericmetadata-dispatch-store. + +``` +(define (define-generic-procedure-handler generic-procedure + applicability + handler) + (((generic-metadata-dispatch-store + (generic-procedure-metadata generic-procedure)) + 'add-handler!) + applicability + handler)) +``` + +Finally, the heart of the mechanism is the dispatch, called by a generic procedure (the-generic-procedure on page 97), which finds an appropriate handler and applies it. The default handler, as supplied during construction of the generic procedure, is called if there is no applicable handler. 13 + +``` +(define (generic-procedure-dispatch metadata args) + (let ((handler + (get-generic-procedure-handler metadata args))) + (apply handler args))) +(define (get-generic-procedure-handler metadata args) +``` + +``` +(or ((generic-metadata-getter metadata) args) + ((generic-metadata-default-getter metadata)))) +``` + +#### **The power of extensible generics** + +Construction of a system on a substrate of extensible generic procedures is a powerful idea. In our example it is possible to define what is meant by addition, multiplication, etc., for new data types unimagined by the language designer. For example, if the arithmetic operators of a system are implemented as extensible generics, a user may extend them to support arithmetic on quaternions, vectors, matrices, integers modulo a prime, functions, tensors, differential forms, This is not just making new capabilities possible; it also extends old programs, so a program that was written to manipulate simple numerical quantities may become useful for manipulating scalar-valued functions. + +We have seen that there are potential problems associated with this use of extensible generic procedures. On the other hand, some "mutations" will be extremely valuable. For example, it is possible to extend arithmetic to symbolic quantities. The simplest way to do this is to make a generic extension to all of the operators to take symbolic quantities as arguments and return a data structure representing the indicated operation on the arguments. With the addition of a simplifier of algebraic expressions we suddenly have a symbolic manipulator. This is useful in debugging purely numerical calculations, because if we give them symbolic arguments we can examine the resulting symbolic expressions to make sure that the program is calculating what we intend it to. It is also the basis of a partial evaluator for optimization of numerical programs. And functional differentiation can be viewed as a generic extension of arithmetic to a compound data type (see section 3.3). The scmutils system we use to teach classical mechanics [121] implements differentiation in exactly this way. + +# **Exercise 3.4: Functional values** + +The generic arithmetic structure allows us to close the system so that functions that return functions can work, as in the example + +``` +(((* 3 + (lambda (x) (lambda (y) (+ x y))) + (lambda (x) (lambda (y) (vector y x)))) + 'a) +4) +(* (* 3 (+ a 4)) #(4 a)) +``` + +- **a.** How hard is it to arrange for this to work in the purely combinator-based arithmetic introduced in section 3.1? Why? +- **b.** Exercise 3.3 on page 86 asked about the implications of ordering of vector and functional extensions. Is the generic system able to support both expressions discussed there (and copied below)? Explain. + +``` +((magnitude unit-circle) 'a) +((magnitude (vector sin cos)) 'a) +``` + +**c.** Is there any good way to make the following work at all? + +``` +((vector cos sin) 3) +#(-.9899924966004454 .1411200080598672) +``` + +Show code that makes this work or explain the difficulties. + +# **Exercise 3.5: A weird bug** + +Consider the +-like ("plus-like") procedure in arith.scm, shown below, which implements *n*-ary procedures + and \* as part of installing an arithmetic. It returns a pair of a name and a procedure; the installer will bind the name to the procedure. + +It seems that it is written to execute the get-identity procedure that computes the identity every time the operation is + +called with no arguments. + +``` +(define (+-like operator identity-name) + (lambda (arithmetic) + (let ((binary-operation + (find-arithmetic-operation operator arithmetic))) + (and binary-operation + (let ((binary + (operation-procedure binary-operation)) + (get-identity + (identity-name->getter identity-name + arithmetic))) + (cons operator + (lambda args + (case (length args) + ((0) (get-identity)) + ((1) (car args)) + (else (pairwise binary args)))))))))) +``` + +Perhaps the identity for an operator should be computed only once, not every time the handler is called. As a consequence, it is proposed that the code should be modified as follows: + +``` +(define (+-like operator identity-name) + (lambda (arithmetic) + (let ((binary-operation + (find-arithmetic-operation operator arithmetic))) + (and binary-operation + (let ((binary + (operation-procedure binary-operation)) + (identity + ((identity-name->getter identity-name + arithmetic)))) + (cons operator + (lambda args + (case (length args) + ((0) identity) + ((1) (car args)) + (else (pairwise binary args)))))))))) +``` + +However, this has a subtle bug! Can you elicit the bug? Can you explain it? + +## **Exercise 3.6: Matrices** + +Matrices are ubiquitous in scientific and technical computing. + +**a.** Make and install an arithmetic package for matrices of numbers, with operations +, -, negate, and \*. This arithmetic needs to be able to know the number of rows and the number of columns in a matrix, since matrix multiplication is defined only if the number of columns in the first matrix is equal to the number of rows in the second one. + +Make sure that your multiplier can multiply a matrix with a scalar or with a vector. For matrices to play well with vectors you probably need to distinguish row vectors and column vectors. How does this affect the design of the vector package? (See exercise 3.2 on page 85.) + +You may assume that the vectors and matrices are of small dimension, so you do not need to deal with sparse representations. A reasonable representation of a matrix is a Scheme vector in which each element is a Scheme vector representing a row. + +- **b.** Vectors and matrices may contain symbolic numerical quantities. Make this work. +- **c.** Matrix inversion is appropriate for your arithmetic. If a symbolic matrix is dense, the inverse may take space that is factorial in the dimension. Why? + +Note: We are not asking you to implement matrix inversion. + +# **Exercise 3.7: Literal vectors and matrices** + +It is also possible to have arithmetic on literal matrices and literal vectors with an algebra of symbolic expressions of vectors and matrices. Can you make symbolic algebra of these compound \ No newline at end of file diff --git a/raw/book/설계원칙-140-161.md b/raw/book/설계원칙-140-161.md new file mode 100644 index 0000000..0ef2117 --- /dev/null +++ b/raw/book/설계원칙-140-161.md @@ -0,0 +1,703 @@ +structures play well with vectors and matrices that have symbolic numerical expressions as elements? Caution: This is quite hard. Perhaps it is appropriate as part of a long-term project. + +# **3.3 Example: Automatic differentiation** + +One remarkable application of extensible generic procedures is *automatic differentiation*. 14 This is a beautiful way to obtain a program that computes the derivative of the function computed by a given program. 15 Automatic differentiation is now an important component in machine learning applications. + +We will see that a simple way to implement automatic differentiation is to extend the generic arithmetic primitives to work with *differential objects*, a new compound data type. This will enable the automatic differentiation of symbolic as well as numerical functions. It will also enable us to make automatic differentiation work with higher-order procedures—procedures that return other procedures as values. + +Here is a simple example of automatic differentiation to illustrate what we are talking about: + +``` +((derivative (lambda (x) (expt x 3))) 2) +12 +``` + +Note that the derivative of the function that computes the cube of its argument is a new function, which when given 2 as its argument returns 12 as its value. + +If we extend the arithmetic to handle symbolic expressions, and we do some algebraic simplification on the result, we get: + +``` +((derivative (lambda (x) (expt x 3))) 'a) +(* 3 (expt a 2)) +``` + +And the full power of the programming language is available, including higher-order procedures. This kind of system is useful in + +working with the very large expressions that occur in interesting physics problems. 16 + +Let's look at a simple application: the computation of the roots of an equation by Newton's method. The idea is that we want to find values of *x* for which *f* (*x*) = 0. If *f* is sufficiently smooth, and we have a sufficiently close guess *x*0 , we can improve the guess by computing a new guess *x*1 by the formula: + +$$x_{n+1} = x_n - \frac{f(x_n)}{Df(x_n)}$$ + +This can be repeated, as necessary, to get a sufficiently accurate result. An elementary program to accomplish this is: + +``` +(define (root-newton f initial-guess tolerance) + (let ((Df (derivative f))) + (define (improve-guess xn) + (- xn (/ (f xn) (Df xn)))) + (let loop ((xn initial-guess)) + (let ((xn+1 (improve-guess xn))) + (if (close-enuf? xn xn+1 tolerance) + xn+1 + (loop xn+1)))))) +``` + +Notice that the local procedure named Df in root-newton is a procedure that computes the derivative of the function computed by the procedure passed in as *f*. + +For example, suppose we want to know the angle *θ* in the first quadrant for which cos(*θ*) = sin(*θ*). (The answer is *π/*4 ≈ *.*7853981633974484) We can write: + +``` +(define (cs theta) + (- (cos theta) (sin theta))) +(root-newton cs 0.5 1e-8) +.7853981633974484 +``` + +This result is correct to full machine accuracy. + +#### **3.3.1 How automatic differentiation works** + +The program for automatic differentiation is directly derived from the definition of the derivative. Suppose that given a function *f* and a point *x* in its domain, we want to know the value of the function at a nearby point *f* (*x* + Δ*x*), where Δ*x* is a small increment. The derivative of a function *f* is defined to be the function *Df* whose value for particular arguments *x* is something that can be "multiplied" by an increment Δ*x* of the argument to get the best possible linear approximation to the increment in the value of *f*: + +$$f(x + \Delta x) \approx f(x) + Df(x) \Delta x$$ + +We implement this definition using a data type that we call a *differential object*. A differential object [*x, δx*] can be thought of as a number with a small increment, *x* + *δx*. But we treat it as a new numerical quantity similar to a complex number: it has two components, a *finite part* and an *infinitesimal part*. 17 We extend each primitive arithmetic function to work with differential objects: each primitive arithmetic function *f* must know its derivative function *Df* , so that: + +$$[x, \delta x] \xrightarrow{f} [f(x), Df(x)\delta x]$$ + (3.5) + +Note that the derivative of *f* at the point *x*, *Df* (*x*), is the coefficient of *δx* in the infinitesimal part of the resulting differential object. + +Now here is the powerful idea: If we then pass the result of *f* ([*x, δx*]) (equation 3.5) through another function *g*, we obtain the chainrule answer we would hope for: + +$$[f(x), Df(x)\delta x] \stackrel{g}{\longmapsto} [g(f(x)), Dg(f(x))Df(x)\delta x]$$ + +Thus, if we can compute the results of all primitive functions on differential objects, we can compute the results of all compositions of functions on differential objects. Given such a result, we can extract the derivative of the composition: the derivative is the coefficient of the infinitesimal increment in the resulting differential object. + +To extend a generic arithmetic operator to compute with differential objects, we need only supply a procedure that computes the derivative of the primitive arithmetic function that the operator names. Then we can use ordinary Scheme compositions to get the derivative of any composition of primitive functions. 18 + +Given a procedure implementing a unary function f, the procedure derivative produces a new procedure the-derivative that computes the derivative of the function computed by f. 19 When applied to some argument, x, the derivative creates a new infinitesimal increment dx and adds it to the argument to get the new differential object [*x, δx*] that represents *x* + *δx*. The procedure f is then applied to this differential object and the derivative of f is obtained by extracting the coefficient of the infinitesimal increment dx from the value: + +``` +(define (derivative f) + (define (the-derivative x) + (let* ((dx (make-new-dx)) + (value (f (d:+ x (make-infinitesimal dx))))) + (extract-dx-part value dx))) + the-derivative) +``` + +The procedure make-infinitesimal makes a differential object whose finite part is zero and whose infinitesimal part is dx. The procedure d:+ adds differential objects. The details will be explained in section 3.3.3. + +#### **Extending the primitives** + +We need to make handler procedures that extend the primitive arithmetic generic procedures to operate on differential objects. For each unary procedure we have to make the finite part of the result + +and the infinitesimal part of the result, and we have to put the results together, as expressed in equation 3.5. So the handler for a unary primitive arithmetic procedure that computes function *f* is constructed by diff:unary-proc from the procedure f for *f* and the procedure df for its derivative *Df*. These are glued together using special addition and multiplication procedures d:+ and d:\* for differential objects, to be explained in section 3.3.3. + +``` +(define (diff:unary-proc f df) + (define (uop x) ; x is a differential object + (let ((xf (finite-part x)) + (dx (infinitesimal-part x))) + (d:+ (f xf) (d:* (df xf) dx)))) + uop) +``` + +For example, the sqrt procedure handler for differential objects is just: + +``` +(define diff:sqrt + (diff:unary-proc sqrt (lambda (x) (/ 1 (* 2 (sqrt x)))))) +``` + +The first argument of diff:unary-proc is the sqrt procedure and the second argument is a procedure that computes the derivative of sqrt. + +We add the new handler to the generic sqrt procedure using + +``` +(assign-handler! sqrt diff:sqrt differential?) +``` + +where differential? is a predicate that is true only of differential objects. The procedure assign-handler! is just shorthand for a useful pattern: + +``` +(define (assign-handler! procedure handler . preds) + (define-generic-procedure-handler procedure + (apply match-args preds) + handler)) +``` + +And the procedure match-args makes an applicability specification from a sequence of predicates. + +Handlers for other unary primitives are straightforward: 20 + +``` +(define diff:exp (diff:unary-proc exp exp)) +(define diff:log (diff:unary-proc log (lambda (x) (/ 1 x)))) +(define diff:sin (diff:unary-proc sin cos)) +(define diff:cos +``` + +Binary arithmetic operations are a bit more complicated. + +$$g(x + \Delta x, y + \Delta y) \approx g(x, y) + \partial_0 g(x, y) \Delta x + \partial_1 g(x, y) \Delta y$$ + (3.6) + +where $\partial_0 f$ and $\partial_1 f$ are the partial derivative functions of f with respect to the two arguments. Let f be a function of two arguments; then $\partial_0 f$ is a new function of two arguments that computes the partial derivative of f with respect to its first argument: + +$$\partial_0 f(x,y) = \left. \frac{\partial}{\partial u} f(u,v) \right|_{u=x,v=y}$$ + +So the rule for binary operations is + +$$([x, \delta x], [y, \delta y]) \xrightarrow{f} [f(x, y), \partial_0 f(x, y) \delta x + \partial_1 f(x, y) \delta y]$$ + +To implement binary operations we might think that we could simply follow the plan for unary operations, where dof and dlf are the two partial derivative functions: + +``` +(define (diff:binary-proc f d0f d1f) + (define (bop x y) + (let ((dx (infinitesimal-part x)) + (dy (infinitesimal-part y)) + (xf (finite-part x)) +``` + +``` +(yf (finite-part y))) + (d:+ (f xf yf) +``` + +This is a good plan, but it isn't quite right: it doesn't ensure that the finite and infinitesimal parts are consistently chosen for the two arguments. We need to be more careful about how we choose the parts. We will explain this technical detail and fix it in section 3.3.3, but let's go with this approximately correct code for now. + +Addition and multiplication are straightforward, because the partial derivatives are simple, but division and exponentiation are more interesting. We show the assignment of handlers only for diff:+ because all the others are similar. + +``` +(define diff:+ + (diff:binary-proc + + (lambda (x y) 1) + (lambda (x y) 1)) +(assign-handler! + diff:+ differential? any-object?) +(assign-handler! + diff:+ any-object? differential?) +(define diff: * + (diff:binary-proc * + (lambda (x y) y) + (lambda (x y) x)) +(define diff:/ + (diff:binary-proc / + (lambda (x y) + (/ 1 y)) + (lambda (x y)) + (* -1 (/ x (square y)))))) +``` + +The handler for exponentiation f(x, y) = x is a bit more complicated. The partial with respect to the first argument is simple: $\partial_0 f(x, y) = yx^{-1}$ . But the partial with respect to the second argument is usually $\partial_1 f(x, y) = x \log x$ , except for some special cases: + +``` +(define diff:expt + (diff:binary-proc expt + (lambda (x y) + (* y (expt x (- y 1)))) + (lambda (x y) + (if (and (number? x) (zero? x)) + (if (number? y) + (if (positive? y) + 0 + (error "Derivative undefined: EXPT" + x y)) + 0) + (* (log x) (expt x y)))))) +``` + +## **Extracting the derivative's value** + +To compute the value of the derivative of a function, we apply the function to a differential object and obtain a result. We have to extract the derivative's value from that result. There are several possibilities that must be handled. If the result is a differential object, we have to pull the derivative's value out of the object. If the result is not a differential object, the derivative's value is zero. There are other cases that we have not mentioned. This calls for a generic procedure with a default that produces a zero. + +``` +(define (extract-dx-default value dx) 0) +(define extract-dx-part + (simple-generic-procedure 'extract-dx-part 2 + extract-dx-default)) +``` + +In the case where a differential object is returned, the coefficient of dx is the required derivative. This will turn out to be a bit complicated, but the basic idea can be expressed as follows: + +``` +(define (extract-dx-differential value dx) + (extract-dx-coefficient-from (infinitesimal-part value) +dx)) +(define-generic-procedure-handler extract-dx-part + (match-args differential? diff-factor?) + extract-dx-differential) +``` + +The reason this is not quite right is that for technical reasons the structure of a differential object is more complex than we have already shown. It will be fully explained in section 3.3.3. + +Note: We made the extractor generic to enable future extensions to functions that return functions or compound objects, such as vectors, matrices, and tensors. (See exercise 3.12 on page 124.) + +Except for the fact that there may be more primitive operators and data structures to be included, this is all that is really needed to implement automatic differentiation! All of the procedures referred to in the handlers are the usual generic procedures on arithmetic; they may include symbolic arithmetic and functional arithmetic. + +### **3.3.2 Derivatives of n-ary functions** + +For a function with multiple arguments we need to be able to compute the partial derivatives with respect to each argument. One way to do this is: 21 + +``` +(define ((partial i) f) + (define (the-derivative . args) + (if (not (< i (length args))) + (error "Not enough arguments for PARTIAL" i f args)) + (let* ((dx (make-new-dx)) + (value + (apply f (map (lambda (arg j) + (if (= i j) + (d:+ arg + (make-infinitesimal dx)) + arg)) + args (iota (length args)))))) + (extract-dx-part value dx))) + the-derivative) +``` + +Here we are extracting the coefficient of the infinitesimal dx in the result of applying f to the arguments supplied with the ith argument incremented by dx. 22 + +Now consider a function *g* of two arguments. Expanding on equation 3.6 we find that the derivative *Dg* is multiplied by a vector of increments to the arguments: + +The derivative *Dg* of *g* at the point *x, y* is the pair of partial derivatives in square brackets. The inner product of that *covector* of partials with the *vector* of increments is the increment to the function *g*. The general-derivative procedure computes this result: + +``` +(define (general-derivative g) + (define ((the-derivative . args) . increments) + (let ((n (length args))) + (assert (= n (length increments))) + (if (= n 1) + (* ((derivative g) (car args)) + (car increments)) + (reduce (lambda (x y) (+ y x)) + 0 + (map (lambda (i inc) + (* (apply ((partial i) g) args) + inc)) + (iota n) + increments))))) + the-derivative) +``` + +Unfortunately general-derivative does not return the structure of partial derivatives. It is useful in many contexts to have a derivative procedure gradient that actually gives the covector of partial derivatives. (See exercise 3.10.) + +# **Exercise 3.8: Partial derivatives** + +Another way to think about partial derivatives is in terms of *λ*calculus currying. Draw a diagram of how the data must flow. Use currying to fix the arguments that are held constant, producing a one-argument procedure that the ordinary derivative will be applied to. Write that version of the partial derivative procedure. + +# **Exercise 3.9: Adding handlers** + +There are primitive arithmetic functions for which we did not add handlers for differential objects, for example tan. + +- **a.** Add handlers for tan and atan1 (atan1 is a function of one argument). +- **b.** It would be really nice to have atan optionally take two arguments, as in the Scheme Report [109], because we usually want to preserve the quadrant we are working in. Fix the generic procedure atan to do this correctly—using atan1 for one argument and atan2 if given two arguments. Also, install an atan2 handler for differentials. Remember, it must coexist with the atan1 handler. + +# **Exercise 3.10: Vectors and covectors** + +As described above, the idea of derivative can be generalized to functions with multiple arguments. The gradient of a function of multiple arguments is the covector of partial derivatives with respect to each of the arguments. + +- **a.** Develop data types for vectors and covectors such that the value of *Dg*(*x, y*) is the covector of partials. Write a gradient procedure that delivers that value. Remember, the product of a vector and a covector should be their inner product—the sum of the componentwise products of their elements. +- **b.** Notice that if the input to a function is a vector, that is similar to multiple inputs, so the output of the gradient should be a covector. Note also that if the input to a function is a covector, then the output of the gradient should be a vector. Make this work. + +#### **3.3.3 Some technical details** + +Although the idea behind automatic differentiation is not complicated, there are a number of subtle technical details that must be addressed for it to work correctly. + +### **Differential algebra** + +If we want to compute a second derivative we must take a derivative of a derivative function. The evaluation of such a function will have two infinitesimals in play. To enable the computation of multiple derivatives and derivatives of functions of several variables we define an algebra of differential objects in "infinitesimal space." The objects are multivariate power series in which no infinitesimal increment has exponent greater than one. 23 + +A differential object is represented by a tagged list of the terms of a power series. Each term has a coefficient and a list of infinitesimal incremental factors. The terms are kept sorted, in descending order. (Order is the number of incrementals. So *δxδy* is higher order than *δx* or *δy*.) Here is a quick and dirty implementation: 24 + +``` +(define differential-tag 'differential) +(define (differential? x) + (and (pair? x) (eq? (car x) differential-tag))) +(define (diff-terms h) + (if (differential? h) + (cdr h) + (list (make-diff-term h '())))) +``` + +The term list is just the cdr of the differential object. However, if we are given an object that is not explicitly a differential object, for example a number, we coerce it to a differential object with a single term and with no incremental factors. When we make a differential object from a (presorted) list of terms, we always try to return a simplified version, which may be just a number, which is not explicitly a differential object: + +``` +(define (make-differential terms) + (let ((terms ; Nonzero terms + (filter + (lambda (term) + (let ((coeff (diff-coefficient term))) + (not (and (number? coeff) (= coeff 0))))) + terms))) + (cond ((null? terms) 0) + ((and (null? (cdr terms)) + ;; Finite part only: + (null? (diff-factors (car terms)))) + (diff-coefficient (car terms))) + ((every diff-term? terms) + (cons differential-tag terms)) + (else (error "Bad terms"))))) +``` + +In this implementation the terms are also represented as tagged lists, each containing a coefficient and an ordered list of factors. + +``` +(define diff-term-tag 'diff-term) +(define (make-diff-term coefficient factors) + (list diff-term-tag coefficient factors)) +(define (diff-term? x) + (and (pair? x) (eq? (car x) diff-term-tag))) +(define (diff-coefficient x) + (cadr x)) +(define (diff-factors x) + (caddr x)) +``` + +To compute derivatives we need to be able to add and multiply differential objects: + +``` +(define (d:+ x y) + (make-differential + (+diff-termlists (diff-terms x) (diff-terms y)))) +(define (d:* x y) + (make-differential + (*diff-termlists (diff-terms x) (diff-terms y)))) +``` + +and we also need this: + +``` +(define (make-infinitesimal dx) + (make-differential (list (make-diff-term 1 (list dx))))) +``` + +Addition of term lists is where we enforce and use the sorting of terms, with higher-order terms coming earlier in the lists. We can add two terms only if they have the same factors. And if the sum of the coefficients is zero we do not include the resulting term. + +``` +(define (+diff-termlists l1 l2) + (cond ((null? l1) l2) + ((null? l2) l1) + (else + (let ((t1 (car l1)) (t2 (car l2))) + (cond ((equal? (diff-factors t1) (diff-factors +t2)) + (let ((newcoeff (+ (diff-coefficient t1) + (diff-coefficient t2)))) + (if (and (number? newcoeff) + (= newcoeff 0)) + (+diff-termlists (cdr l1) (cdr l2)) + (cons + (make-diff-term newcoeff + (diff-factors t1)) + (+diff-termlists (cdr l1) + (cdr l2)))))) + ((diff-term>? t1 t2) + (cons t1 (+diff-termlists (cdr l1) l2))) + (else + (cons t2 + (+diff-termlists l1 (cdr l2))))))))) +``` + +Multiplication of term lists is straightforward, if we can multiply individual terms. The product of two term lists l1 and l2 is the term list resulting from adding up the term lists resulting from multiplying every term in l1 by every term in l2. + +``` +(define (*diff-termlists l1 l2) + (reduce (lambda (x y) + (+diff-termlists y x)) + '() + (map (lambda (t1) + (append-map (lambda (t2) + (*diff-terms t1 t2)) + l2)) + l1))) +``` + +A term has a coefficient and a list of factors (the infinitesimals). In a differential object no term may have an infinitesimal with an exponent greater than one, because *δx* 2 = 0. Thus, when we multiply two terms we must check that the lists of factors we are merging have no factors in common. This is the reason that \*diff-terms returns a list of the product term or an empty list, to be appended in \*diff-termlists. We keep the factors sorted when we merge the two lists of factors; this makes it easier to sort the terms. + +``` +(define (*diff-terms x y) + (let ((fx (diff-factors x)) (fy (diff-factors y))) + (if (null? (ordered-intersect diff-factor>? fx fy)) + (list (make-diff-term + (* (diff-coefficient x) (diff-coefficient y)) + (ordered-union diff-factor>? fx fy))) + '()))) +``` + +### **Finite and infinitesimal parts** + +A differential object has a finite part and an infinitesimal part. Our diff:binary-proc procedure on page 109 is not correct for differential objects with more than one infinitesimal. To ensure that the parts of the arguments x and y are selected consistently we actually use: + +``` +(define (diff:binary-proc f d0f d1f) + (define (bop x y) + (let ((factor (maximal-factor x y))) + (let ((dx (infinitesimal-part x factor)) + (dy (infinitesimal-part y factor)) + (xe (finite-part x factor)) + (ye (finite-part y factor))) + (d:+ (f xe ye) + (d:+ (d:* dx (d0f xe ye)) + (d:* (d1f xe ye) dy)))))) + bop) +``` + +where factor is chosen by maximal-factor so that both x and y contain it in a term with the largest number of factors. + +The finite part of a differential object is all terms except for terms containing the maximal factor in a term of highest order, and the + +infinitesimal part is the remaining terms, all of which contain that factor. + +Consider the following computation: + +The highest-order term is *∂*0*∂*1 *f* (*x, y*) · *δxδy*. It is symmetrical with respect to *x* and *y*. The crucial point is that we may break the differential object into parts in any way consistent with any one of the maximal factors (here *δx* or *δy*) being primary. It doesn't matter which is chosen, because mixed partials of **R → R** commute. 25 + +``` +(define (finite-part x #!optional factor) + (if (differential? x) + (let ((factor (default-maximal-factor x factor))) + (make-differential + (remove (lambda (term) + (memv factor (diff-factors term))) + (diff-terms x)))) + x)) +(define (infinitesimal-part x #!optional factor) + (if (differential? x) + (let ((factor (default-maximal-factor x factor))) + (make-differential + (filter (lambda (term) + (memv factor (diff-factors term))) + (diff-terms x)))) + 0)) +(define (default-maximal-factor x factor) + (if (default-object? factor) + (maximal-factor x) + factor)) +``` + +## **How extracting really works** + +As explained on page 114, to make it possible to take multiple derivatives or to handle functions with more than one argument, a + +differential object is represented as a multivariate power series in which no infinitesimal increment has exponent greater than one. Each term in this series has a coefficient and a list of infinitesimal incremental factors. This complicates the extraction of the derivative with respect to any one incremental factor. Here is the real story: + +In the case where a differential object is returned we must find those terms of the result that contain the infinitesimal factor dx for the derivative we are evaluating. We collect those terms, removing dx from each. If there are no terms left after taking out the ones with dx, the value of the derivative is zero. If there is exactly one term left, which has no differential factors, then the coefficient of that term is the value of the derivative. But if there are remaining terms with differential factors, we must return the differential object with those residual terms as the value of the derivative. + +``` +(define (extract-dx-differential value dx) + (let ((dx-diff-terms + (filter-map + (lambda (term) + (let ((factors (diff-factors term))) + (and (memv dx factors) + (make-diff-term (diff-coefficient term) + (delv dx factors))))) + (diff-terms value)))) + (cond ((null? dx-diff-terms) 0) + ((and (null? (cdr dx-diff-terms)) + (null? (diff-factors (car dx-diff-terms)))) + (diff-coefficient (car dx-diff-terms))) + (else (make-differential dx-diff-terms))))) +(define-generic-procedure-handler extract-dx-part + (match-args differential? diff-factor?) + extract-dx-differential) +``` + +## **Higher-order functions** + +For many applications we want our automatic differentiator to work correctly for functions that return functions as values: + +``` +(((derivative + (lambda (x) + (lambda (y z) + (* x y z)))) + 2) + 3 + 4) +;Value: 12 +``` + +Including literal functions and partial derivatives makes this even more interesting. + +``` +((derivative + (lambda (x) + (((partial 1) (literal-function 'f)) + x 'v))) + 'u) +(((partial 0) ((partial 1) f)) u v) +``` + +And things can get even more complicated: + +``` +(((derivative + (lambda (x) + (derivative + (lambda (y) + ((literal-function 'f) + x y))))) + 'u) + 'v) +(((partial 0) ((partial 1) f)) u v) +``` + +Making this work introduces serious complexity in the procedure extract-dx-part. + +If the result of applying a function to a differential object is a function—a derivative of a derivative, for example—we need to defer the extraction until that function is called with arguments: + +In a case where a function is returned, as in + +``` +(((derivative + (lambda (x) + (derivative + (lambda (y) + (* x y))))) + 'u) +``` + +``` +'v) +1 +``` + +we cannot extract the derivative until the function is applied to arguments. So we defer the extraction until we get the value resulting from that application. We extend our generic extractor: + +``` +(define (extract-dx-function fn dx) + (lambda args + (extract-dx-part (apply fn args) dx))) +(define-generic-procedure-handler extract-dx-part + (match-args function? diff-factor?) + extract-dx-function) +``` + +Unfortunately, this version of extract-dx-function has a subtle bug. 26 Our patch is to wrap the body of the new deferred procedure with code that remaps the factor dx to avoid the unpleasant conflict. So, we change the handler for functions to: + +``` +(define (extract-dx-function fn dx) + (lambda args + (let ((eps (make-new-dx))) + (replace-dx dx eps + (extract-dx-part + (apply fn + (map (lambda (arg) + (replace-dx eps dx arg)) + args)) + dx))))) +``` + +This creates a brand-new factor eps and uses it to stand for dx in the arguments, thus preventing collision with any other instances of dx. + +Replacement of the factors is itself a bit more complicated, because the code has to grovel around in the data structures. We will make the replacement a generic procedure, so we can extend it to new kinds of data. The default is that the replacement is just the identity on the object: + +``` +(define (replace-dx-default new-dx old-dx object) object) +(define replace-dx +``` + +``` +(simple-generic-procedure 'replace-dx 3 + replace-dx-default)) +``` + +For a differential object we have to actually go in and substitute the new factor for the old one, and we have to keep the factor lists sorted: + +``` +(define (replace-dx-differential new-dx old-dx object) + (make-differential + (sort (map (lambda (term) + (make-diff-term + (diff-coefficient term) + (sort (substitute new-dx old-dx + (diff-factors term)) + diff-factor>?))) + (diff-terms object)) + diff-term>?))) +(define-generic-procedure-handler replace-dx + (match-args diff-factor? diff-factor? differential?) + replace-dx-differential) +``` + +Finally, if the object is itself a function we have to defer it until arguments are available to compute a value: + +``` +(define (replace-dx-function new-dx old-dx fn) + (lambda args + (let ((eps (make-new-dx))) + (replace-dx old-dx eps + (replace-dx new-dx old-dx + (apply fn + (map (lambda (arg) + (replace-dx eps old-dx arg)) + args))))))) +(define-generic-procedure-handler replace-dx + (match-args diff-factor? diff-factor? function?) + replace-dx-function) +``` + +This is quite a bit more complicated than we might expect. It actually does three replacements of the differential factors. This is to prevent collisions with factors that may be free in the body of fn that are inherited from the lexical environment of definition of the function fn. 27 + +# **Exercise 3.11: The bug!** + +Before we became aware of the bug pointed out in footnote 26 on page 121, the procedure extract-dx-function was written: + +``` +(define (extract-dx-function fn dx) + (lambda args + (extract-dx-part (apply fn args) dx))) +``` + +Demonstrate the reason for the use of the replace-dx wrapper by constructing a function whose derivative is wrong with this earlier version of extract-dx-part but is correct in the fixed version. This is not easy! You may want to read the references pointed at in footnote 26. + +#### **3.3.4 Literal functions of differential arguments** + +For simple arguments, applying a literal function is just a matter of constructing the expression that is the application of the function expression to the arguments. But literal functions must also be able to accept differential objects as arguments. When that happens, the literal function must construct (partial) derivative expressions for the arguments that are differentials. For the ith argument of an nargument function the appropriate derivative expression is: + +``` +(define (deriv-expr i n fexp) + (if (= n 1) + '(derivative ,fexp) + '((partial ,i) ,fexp))) +``` + +Some arguments may be differential objects, so a literal function must choose, for each argument, a finite part and an infinitesimal part. Just as for binary arithmetic handlers, the maximal factor must be consistently chosen. Our literal functions are able to take many arguments, so this may seem complicated, but we wrote the maximal-factor procedure to handle many arguments. This is explained in section 3.3.3. + +If there are no differential objects among the arguments we just cons up the required expression. If there are differential objects we need to make a derivative of the literal function. To do this we find a maximal factor from all of the arguments and separate out the finite parts of the arguments—the terms that do not have that factor. (The infinitesimal parts are the terms that have that factor.) The partial derivatives are themselves literal functions with expressions that are constructed to include the argument index. The resulting differential object is the inner product of the partial derivatives at the finite parts of the arguments with the infinitesimal parts of the arguments. + +This is all brought together in the following procedure: + +``` +(define (literal-function fexp) + (define (the-function . args) + (if (any differential? args) + (let ((n (length args)) + (factor (apply maximal-factor args))) + (let ((realargs + (map (lambda (arg) + (finite-part arg factor)) + args)) + (deltargs + (map (lambda (arg) + (infinitesimal-part arg factor)) + args))) + (let ((fxs (apply the-function realargs)) + (partials + (map (lambda (i) + (apply (literal-function + (deriv-expr i n fexp)) + realargs)) + (iota n)))) + (fold d:+ fxs + (map d:* partials deltargs))))) + '(,fexp ,@args))) + the-function) +``` + +# **Exercise 3.12: Functions with structured values** \ No newline at end of file diff --git a/raw/book/설계원칙-162-170.md b/raw/book/설계원칙-162-170.md new file mode 100644 index 0000000..9c5542f --- /dev/null +++ b/raw/book/설계원칙-162-170.md @@ -0,0 +1,260 @@ +We made the extract-dx-part procedure generic (page 110) so we could extend it for values other than differential objects and functions. Extend extract-dx-part to work with derivatives of functions that return vectors. Note: You also have to extend the replace-dx generic procedure (page 122) in the extractor. + +# **3.4 Efficient generic procedures** + +In section 3.2.3 we dispatched to a handler by finding an applicable rule using the dispatch store provided in the metadata: + +``` +(define (generic-procedure-dispatch metadata args) + (let ((handler + (get-generic-procedure-handler metadata args))) + (apply handler args))) +``` + +The implementation of the dispatch store (on page 98) we used (on page 89) to make the simple-generic-procedure constructor was rather crude. The simple dispatch store maintains the rule set as a list of rules. Each rule is represented as a pair of an applicability and a handler. The applicability is a list of lists of predicates to apply to tendered arguments. The way a generic procedure constructed by simple-generic-procedure finds an appropriate handler is to sequentially scan the list of rules looking for an applicability that is satisfied by the arguments. + +This is seriously inefficient, because the applicability of many rules may have the same predicate in a given operand position: For example, for multiplication in a system of numerical and symbolic arithmetic there may be many rules whose first predicate is number?. So the number? predicate may be applied many times before finding an applicable rule. It would be good to organize the rules so that finding an applicable one does not perform redundant tests. This is usually accomplished by the use of an index. + +#### **3.4.1 Tries** + +One simple index mechanism is based on the *trie*. 28 + +A trie is traditionally a tree structure, but more generally it may be a directed graph. Each node in the trie has edges connecting to successor nodes. Each edge has an associated predicate. The data being tested is a linear sequence of features, in this case the arguments to a generic procedure. + +Starting at the root of the trie, the first feature is taken from the sequence and is tested by each predicate on an edge emanating from the root node. The successful predicate's edge is followed to the next node, and the process repeats with the remainder of the sequence of features. When we run out of features, the current node will contain the associated value, in this case an applicable handler for the arguments. + +It is possible that at any node, more than one predicate may succeed. If this happens, then all of the successful branches must be followed. Thus there may be multiple applicable handlers, and there must be a separate means of deciding what to do. + +Here is how we can use a trie. Evaluating the following sequence of commands will [incrementally](#page-1-0) construct the trie shown in figure 3.1. + +![](설계원칙-162-170_images/_page_1_Figure_5.jpeg) + +**[Figure](#page-1-1) 3.1** A trie can be used to classify sequences of features. A trie is a directed graph in which each edge has a predicate. Starting at the root, the first feature is tested by each predicate on an edge proceeding from the root. If a predicate is satisfied, the process moves to the node at the end of that edge and the next feature is tested. This is repeated with successive features. The classification of the sequence is the set of terminal nodes arrived at. + +``` +(define a-trie (make-trie)) +``` + +We can add an edge to this trie + +``` +(define s (add-edge-to-trie a-trie symbol?)) +``` + +where add-edge-to-trie returns the new node that is at the target end of the new edge. This node is reached by being matched against a symbol. + +We can make chains of edges, which are referenced by lists of the corresponding edge predicates + +``` +(define sn (add-edge-to-trie s number?)) +``` + +The node sn is reached from the root via the path (list symbol? number?). Using a path, there is a simpler way to make a chain of edges than repeatedly calling add-edge-to-trie: + +``` +(define ss (intern-path-trie a-trie (list symbol? symbol?))) +``` + +We can add a value to any node (here we show symbolic values, but we will later store values that are procedural handlers): + +``` +(trie-has-value? sn) +#f +(set-trie-value! sn '(symbol number)) +(trie-has-value? sn) +#t +(trie-value sn) +(symbol number) +``` + +We can also use a path-based interface to set values + +``` +(set-path-value! a-trie (list symbol? symbol?) + '(symbol symbol)) +(trie-value ss) +(symbol symbol) +``` + +Note that both intern-path-trie and set-path-value! reuse existing nodes and edges when possible, adding edges and nodes + +where necessary. + +Now we can match a feature sequence against the trie we have constructed so far: + +``` +(equal? (list ss) (get-matching-tries a-trie '(a b))) +#t +(equal? (list s) (get-matching-tries a-trie '(c))) +#t +``` + +We can also combine matching with value fetching. The procedure get-a-value finds all matching nodes, picks one that has a value, and returns that value. + +``` +(get-a-value a-trie '(a b)) +(symbol symbol) +``` + +But not all feature sequences have an associated value: + +``` +(get-a-value a-trie '(-4)) +;Unable to match features: (-4) +``` + +We can incrementally add values to nodes in the trie: + +``` +(set-path-value! a-trie (list negative-number?) + '(negative-number)) +(set-path-value! a-trie (list even-number?) + '(even-number)) +(get-all-values a-trie '(-4)) +((even-number) (negative-number)) +``` + +where get-all-values finds all the nodes matching a given feature sequence and returns their values. + +Given this trie implementation, we can make a dispatch store that uses a trie as its index: + +``` +(define (make-trie-dispatch-store) + (let ((delegate (make-simple-dispatch-store)) + (trie (make-trie))) + (define (get-handler args) + (get-a-value trie args)) + (define (add-handler! applicability handler) + ((delegate 'add-handler!) applicability handler) +``` + +``` +(for-each (lambda (path) + (set-path-value! trie path handler)) + applicability)) +(lambda (message) + (case message + ((get-handler) get-handler) + ((add-handler!) add-handler!) + (else (delegate message)))))) +``` + +We make this dispatch store simple by delegating most of the operations to a simple dispatch store. The operations that are not delegated are add-handler!, which simultaneously stores the handler in the simple dispatch store and also in the trie, and gethandler, which exclusively uses the trie for access. The simple dispatch store manages the default handler and also the set of rules, which is useful for debugging. This is a simple example of the use of delegation to extend an interface, as opposed to the better-known inheritance idea. + +### **Exercise 3.13: Trie rules** + +To make it easy to experiment with different dispatch stores, we gave generic-procedure-constructor and make-genericarithmetic the dispatch store maker. For example, we can build a full generic arithmetic as on page 95 but using make-triedispatch-store as follows: + +``` +(define trie-full-generic-arithmetic + (let ((g (make-generic-arithmetic make-trie-dispatch- +store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g function-extender) + (add-to-generic-arithmetic! g + (symbolic-extender numeric-arithmetic)) + g)) +(install-arithmetic! trie-full-generic-arithmetic) +``` + +**a.** Does this make any change to the dependence on order that we wrestled with in section 3.2.2? + +- **b.** In general, what characteristics of the predicates could produce situations where there is more than one appropriate handler for a sequence of arguments? +- **c.** Are there any such situations in our generic arithmetic code? + +We have provided a crude tool to measure the effectiveness of our dispatch strategy. By wrapping any computation with withpredicate-counts we can find out how many times each dispatch predicate is called in an execution. For example, evaluating (fib 20) in a generic arithmetic with a trie-based dispatch store may yield something like this: 29 + +``` +(define (fib n) + (if (< n 2) + n + (+ (fib (- n 1)) (fib (- n 2))))) +(with-predicate-counts (lambda () (fib 20))) +(109453 number) +(109453 function) +(54727 any-object) +(109453 symbolic) +6765 +``` + +## **Exercise 3.14: Dispatch efficiency: gotcha!** + +Given this performance tool it is instructive to look at executions of + +``` +(define (test-stormer-counts) + (define (F t x) (- x)) + (define numeric-s0 + (make-initial-history 0 .01 (sin 0) (sin -.01) (sin +-.02))) + (with-predicate-counts + (lambda () + (x 0 ((evolver F 'h stormer-2) numeric-s0 1))))) +``` + +for the rule-list–based dispatch in make-simple-dispatch-store, in the arithmetic you get by: + +``` +(define full-generic-arithmetic + (let ((g (make-generic-arithmetic make-simple-dispatch- +store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g function-extender) + (add-to-generic-arithmetic! g + (symbolic-extender numeric-arithmetic)) + g)) +(install-arithmetic! full-generic-arithmetic) +``` + +and the trie-based version (exercise 3.13), in the arithmetic you get by: + +``` +(install-arithmetic! trie-full-generic-arithmetic) +``` + +For some problems the trie should have much better performance than the simple rule list. We expect that the performance will be better with the trie if we have a large number of rules with the same initial segment. + +Understanding this is important, because the fact that sometimes the trie does not help with the performance appears counterintuitive. We explicitly introduced the trie to avoid redundant calls. Explain this phenomenon in a concise paragraph. + +For an additional insight, look at the performance of (fib 20) in the two implementations. + +When more than one handler is applicable for a given sequence of arguments, it is not clear how to use those handlers; addressing this situation is the job of a *resolution policy*. There are many considerations when designing a resolution policy. For example, a policy that chooses the most specific handler is often a good policy; however, we need more information to implement such a policy. Sometimes it is appropriate to run all of the applicable handlers and compare their results. This can be used to catch errors and provide a kind of redundancy. Or if we have partial information provided by each handler, such as a numerical interval, the results of different handlers can be combined to provide better information. + +#### **3.4.2 Caching** + +With the use of tries we have eliminated redundant evaluation of argument predicates. We can do better by using abstraction to eliminate the evaluation of predicates altogether. A predicate identifies a set of objects that are distinguished from all other objects; in other words, the predicate and the set it distinguishes are effectively the same. In our trie implementation, we use the equality of the predicate procedures to avoid redundancy; otherwise we would have redundant edges in the trie and it would be no help at all. This is also why the use of combinations of predicates doesn't mix well with the trie implementation. + +The problem here is that we want to build an index that discriminates objects according to predicates, but the opacity of procedures makes them unreliable when used as keys to the index. What we'd really like is to assign a name to the set distinguished by a given predicate. If we had a way to get that name from a given object by superficial examination, we could avoid computing the predicate at all. This name is a "type"; but in order to avoid confusion we will refer to this name as a *tag*. + +Given a way to get a tag from an object, we can make a cache that saves the handler resulting from a previous dispatch and reuses it for other dispatches whose arguments have the same tag pattern. But in the absence of explicitly attached tags, there are limitations to this approach, because we can only discriminate objects that share an implementation-specified representation. For example, it's easy to distinguish between a number and a symbol, but it's not easy to distinguish a prime number, because it's unusual for an implementation to represent them specially. + +We will return to the problem of explicit tagging in section 3.5, but in the meantime it is still possible to make a useful cache using the representation tags from the Scheme implementation. Given an implementation-specific procedure implementation-type-name to obtain the representation tag of an object, we can make a cached dispatch store: + +``` +(define a-cached-dispatch-store + (cache-wrapped-dispatch-store (make-trie-dispatch-store) + implementation-type-name)) +``` + +This dispatch store wraps a cache around a trie dispatch store, but it could just as well wrap a simple dispatch store. + +The heart of the cached dispatch store is a memoizer built on a hash table. The key for the hash table is the list of representation tags extracted by the implementation-type-name procedure from the arguments. By passing implementation-type-name into this dispatch-store wrapper (as get-key) we can use it to make cached dispatch stores for more powerful tag mechanisms that we will develop soon. + +``` +(define (cache-wrapped-dispatch-store dispatch-store get-key) + (let ((get-handler + (simple-list-memoizer + eqv? + (lambda (args) (map get-key args)) + (dispatch-store 'get-handler)))) + (lambda (message) + (case message + ((get-handler) get-handler) + (else (dispatch-store message)))))) +``` + +The call to simple-list-memoizer wraps a cache around its last argument, producing a memoized version of it. The second argument specifies how to get the cache key from the procedure's arguments. The eqv? argument specifies how the tags will be identified in the cache. + +## **Exercise 3.15: Cache performance** + +Using the same performance tool we introduced for exercise 3.14 on page 130, make measurements for execution of (test-stormercounts) and (fib 20) in the cached version of dispatch with the same generic arithmetics explored in exercise 3.14. Record your results. How do they compare? \ No newline at end of file diff --git a/raw/book/설계원칙-162-170_images/_page_1_Figure_5.jpeg b/raw/book/설계원칙-162-170_images/_page_1_Figure_5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..88186d0498a44e065de84f2c0435d9a6006e8116 GIT binary patch literal 28208 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 n 2) + (let loop ((k 2)) + (or (n:> (n:square k) n) + (and (not (n:= (n:remainder n k) 0)) + (loop (n:+ k 1))))))) +``` + +Note that all of the arithmetic operators are prefixed with n: to ensure that we get the underlying Scheme operations. + +We construct the prime-number? abstract predicate, with a name for use in error messages and a criterion, slow-prime?, for an object to be considered a prime number: + +``` +(define prime-number? + (simple-abstract-predicate 'prime-number slow-prime?)) +``` + +The procedure simple-abstract-predicate creates an *abstract predicate*, which is a clever trick for memoizing the result of an expensive predicate (in this case slow-prime?). An abstract predicate has an associated constructor that is used to make a *tagged object*, consisting of the abstract predicate's tag and an object. The constructor requires that the object to be tagged satisfies the expensive predicate. The resulting tagged object satisfies the abstract predicate, as well as carrying its tag. Consequently the tagged object can be tested for the property defined by the expensive predicate by using the fast abstract predicate (or, equivalently, by dispatching on its tag). + +For example, the abstract predicate prime-number? is used to tag objects that are verified prime numbers, for the efficient implementation of generic dispatch. This is important because we do not want to execute slow-prime? during the dispatch to determine whether a number is prime. So we build a new *tagged object*, which contains both a *tag* (the tag for prime-number?) and a *datum* (the raw prime number). When a generic procedure is handed a tagged object, it can efficiently retrieve its tag and use that as a cache key. + +In order to make tagged objects, we use predicateconstructor to get the constructor associated with the abstract predicate: + +``` +(define make-prime-number + (predicate-constructor prime-number?)) +(define short-list-of-primes + (list (make-prime-number 2) + (make-prime-number 7) + (make-prime-number 31))) +``` + +The constructor make-prime-number requires that its argument be prime, as determined by slow-prime?: the only objects that can be tagged by this constructor are prime numbers. + +``` +(make-prime-number 4) +;Ill-formed data for prime-number: 4 +``` + +#### **3.5.2 Relationships between predicates** + +The sets that we can define with abstract predicates can be related to one another. For example, the primes are a subset of the positive integers. The positive integers, the even integers, and the odd integers are subsets of the integers. This is important because any operation that is applicable to an integer is applicable to any element of any subset, but there are operations that can be applied to an element of a subset that cannot be applied to all elements of an enclosing superset. For example, the even integers can be halved without leaving a remainder, but that is not true of the full integers. + +When we defined prime-number?, we effectively defined a set of objects. But that set has no relation to the set defined by exactinteger?: + +``` +(exact-integer? (make-prime-number 2)) +#f +``` + +We would like these sets to be properly related, which is done by adding some metadata to the predicates themselves: + +``` +(set-predicate<=! prime-number? exact-integer?) +``` + +This procedure set-predicate<=! modifies the metadata of its argument predicates to indicate that the set defined by the first argument is a (non-strict) subset of the set defined by the second argument. In our case, the set defined by prime-number? is declared to be a subset of the set defined by exact-integer?. Once this is done, exact-integer? will recognize our objects: + +``` +(exact-integer? (make-prime-number 2)) +#t +``` + +#### **3.5.3 Predicates are dispatch keys** + +The abstract predicates we have defined are suitable for use in generic dispatch. Even better, they can be used as cache keys to make dispatch efficient. As we described above, when a predicate is registered, a new tag is created and associated with the predicate. All + +we need is a way to get the tag for a given object: the procedure get-tag does this. + +If we pass get-tag to cache-wrapped-dispatch-store as its get-key argument, we have a working implementation. However, since the set defined by a predicate can have subsets, we need to consider a situation where there are multiple potential handlers for some given arguments. There are a number of possible ways to resolve this situation, but the most common is to identify the "most specific" handler by some means, and invoke that one. Since the subset relation is a partial order, it may not be clear which handler is most specific, so the implementation must resolve the ambiguity by independent means. + +Here is one such implementation. It uses a procedure rule< to sort the matching rules into an appropriate order, then chooses a handler from the result. 30 + +``` +(define (make-subsetting-dispatch-store-maker choose-handler) + (lambda () + (let ((delegate (make-simple-dispatch-store))) + (define (get-handler args) + (let ((matching + (filter (lambda (rule) + (is-generic-handler-applicable? + rule args)) + ((delegate 'get-rules))))) + (and (n:pair? matching) + (choose-handler ; from sorted handlers + (map cdr (sort matching rule<)) + ((delegate 'get-default-handler)))))) + (lambda (message) + (case message + ((get-handler) get-handler) + (else (delegate message))))))) +``` + +The procedure make-most-specific-dispatch-store chooses the first of the sorted handlers to be the effective handler: + +``` +(define make-most-specific-dispatch-store + (make-subsetting-dispatch-store-maker + (lambda (handlers default-handler) + (car handlers)))) +``` + +Another possible choice is to make a "chaining" dispatch store, in which each handler gets an argument that can be used to invoke the next handler in the sorted sequence. This is useful for cases where a subset handler wants to extend the behavior of a superset handler rather than overriding it. We will see an example of this in the clock handler of the adventure game in section 3.5.4. + +``` +(define make-chaining-dispatch-store + (make-subsetting-dispatch-store-maker + (lambda (handlers default-handler) + (let loop ((handlers handlers)) + (if (pair? handlers) + (let ((handler (car handlers)) + (next-handler (loop (cdr handlers)))) + (lambda args + (apply handler (cons next-handler args)))) + default-handler))))) +``` + +Either one of these dispatch stores can be made into a cached dispatch store by adding a caching wrapper: + +``` +(define (make-cached-most-specific-dispatch-store) + (cache-wrapped-dispatch-store + (make-most-specific-dispatch-store) + get-tag)) +(define (make-cached-chaining-dispatch-store) + (cache-wrapped-dispatch-store + (make-chaining-dispatch-store) + get-tag)) +``` + +Then we create the corresponding generic-procedure constructors: + +``` +(define most-specific-generic-procedure + (generic-procedure-constructor + make-cached-most-specific-dispatch-store)) +(define chaining-generic-procedure + (generic-procedure-constructor + make-cached-chaining-dispatch-store)) +``` + +### **3.5.4 Example: An adventure game** + +One traditional way to model a world is "object-oriented programming." The idea is that the world being modeled is made up of objects, each of which has independent local state, and the coupling between the objects is loose. Each object is assumed to have particular behaviors. An object may receive messages from other objects, change its state, and send messages to other objects. This is very natural for situations where the behavior we wish to model does not depend on the collaboration of multiple sources of information: each message comes from one other object. This is a tight constraint on the organization of a program. + +There are other ways to break a problem into pieces. We have looked at "arithmetic" enough to see that the meaning of an operator, such as \*, can depend on the properties of multiple arguments. For example, the product of a number and a vector is a different operation from the product of two vectors or of two numbers. This kind of problem is naturally formulated in terms of generic procedures. 31 + +Consider the problem of modeling a world made of "places," "things," and "people" with generic procedures. How should the state variables that are presumed to be local to the entities be represented and packaged? What operations are appropriately generic over what kinds of entities? Since it is natural to group entities into types (or sets) and to express some of the operations as appropriate for all members of an inclusive set, how is subtyping to be arranged? Any object-oriented view will prescribe specific answers to these design questions; here we have more freedom, and must design the conventions that will be used. + +To illustrate this process we will build a world for a simple adventure game. There is a network of rooms connected by passages and inhabited by a variety of creatures, some of which are *autonomous* in that they can wander around. There is an *avatar* that is controlled by the player. There are things, some of which can be picked up and carried by the creatures. There are ways that the creatures can interact: a troll can bite another creature and damage it; any creature can take a thing carried by another creature. + +Every entity in our world has a set of named properties. Some of these are fixed and others are changeable. For example, a room has exits to other rooms. These represent the topology of the network and cannot be changed. A room also has contents, such as the creatures who are currently in the room and things that may be acquired. The contents of a room change as creatures move around and as they carry things to and from other rooms. We will computationally model this set of named properties as a table from names to property values. + +There is a set of generic procedures that are appropriate for this world. For example, some things, such as books, creatures, and the avatar, are movable. In every case, moving a thing requires deleting it from the contents of the source, adding it to the contents of the destination, and changing its location property. This operation is the same for books, people, and trolls, all of which are members of the "movable things" set. + +A book can be read; a person can say something; a troll can bite a creature. To implement these behaviors there are specific properties of books that are different from the properties of people or those of trolls. But these different kinds of movable things have some properties in common, such as location. So when such a thing is instantiated, it must make a table for all of its properties, including those inherited from more inclusive sets. The rules for implementing the behavior of operators such as move must be able to find appropriate handlers for manipulating the properties in each case. + +#### **The game** + +Our game is played on a rough topological map of MIT. There are various autonomous agents (non-player characters), such as students and officials. The registrar, for example, is a troll. There are movable and immovable things, and movable things can be taken by an autonomous agent or the player's avatar. Although this game has little detail, it can be expanded to be very interesting. + +We create a session with an avatar named gjs who appears in a random place. The game tells the player about the environment of the avatar. + +``` +(start-adventure 'gjs) +You are in dorm-row +You see here: registrar +You can exit: east +``` + +Since the registrar is here it is prudent to leave! (He may bite, and after enough bites the avatar will die.) + +``` +(go 'east) +gjs leaves via the east exit +gjs enters lobby-7 +You are in lobby-7 +You can see: lobby-10 infinite-corridor +You can exit: up west east +alyssa-hacker enters lobby-7 +alyssa-hacker says: Hi gjs +ben-bitdiddle enters lobby-7 +ben-bitdiddle says: Hi alyssa-hacker gjs +registrar enters lobby-7 +registrar says: Hi ben-bitdiddle alyssa-hacker gjs +``` + +Notice that several autonomous agents arrive after the avatar, and that they do so one at a time. So we see that the report is for an interval of simulated time rather than a summary of the state at an instant. This is an artifact of our implementation rather than a deliberate design choice. + +Unfortunately the registrar has followed, so it's time to leave again. + +``` +(say "I am out of here!") +gjs says: I am out of here! +(go 'east) +gjs leaves via the east exit +gjs enters lobby-10 +You are in lobby-10 +You can see: lobby-7 infinite-corridor great-court +You can exit: east south west up +``` + +``` +(go 'up) +gjs leaves via the up exit +gjs enters 10-250 +You are in 10-250 +You see here: blackboard +You can exit: up down +``` + +Room 10-250 is a lecture hall, with a large blackboard. Perhaps we can take it? + +``` +(take-thing 'blackboard) +blackboard is not movable +``` + +So sad—gjs loves blackboards. Let's keep looking around. + +``` +(go 'up) +gjs leaves via the up exit +gjs enters barker-library +You are in barker-library +You see here: engineering-book +You can exit: up down +An earth-shattering, soul-piercing scream is heard... +``` + +Apparently, a troll (maybe the registrar) has eaten someone. However, here is a book that should be takable, so we take it and return to the lecture hall. + +``` +(take-thing 'engineering-book) +gjs picks up engineering-book +(go 'down) +gjs leaves via the down exit +gjs enters 10-250 +You are in 10-250 +Your bag contains: engineering-book +You see here: blackboard +You can exit: up down +``` + +From the lecture hall we return to lobby-10, where we encounter lambda-man, who promptly steals our book. + +``` +(go 'down) +gjs leaves via the down exit +gjs enters lobby-10 +gjs says: Hi lambda-man +``` + +``` +You are in lobby-10 +Your bag contains: engineering-book +You see here: lambda-man +You can see: lobby-7 infinite-corridor great-court +You can exit: east south west up +alyssa-hacker enters lobby-10 +alyssa-hacker says: Hi gjs lambda-man +lambda-man takes engineering-book from gjs +gjs says: Yaaaah! I am upset! +``` + +#### **The object types** + +To create an object in our game, we define some properties with make-property, define a type predicate with make-type, get the predicate's associated instantiator with type-instantiator, and call that instantiator with appropriate arguments. + +How do we make a troll? The make-troll constructor for a troll takes arguments that specify the values for properties that are specific to the particular troll being constructed. The troll will be created in a given place with a restlessness (proclivity to move around), an acquisitiveness (proclivity to take things), and a hunger (proclivity to bite other people). + +``` +(define (create-troll name place restlessness hunger) + (make-troll 'name name + 'location place + 'restlessness restlessness + 'acquisitiveness 1/10 + 'hunger hunger)) +``` + +We create two trolls: grendel and registrar. They are initially placed in random places, with some random proclivities. + +``` +(define (create-trolls places) + (map (lambda (name) + (create-troll name + (random-choice places) + (random-bias 3) + (random-bias 3))) + '(grendel registrar))) +``` + +The procedure random-choice randomly selects one item from the list it is given. The procedure random-bias chooses a number (in this case 1, 2, or 3) and returns its reciprocal. + +The troll type is defined as a predicate that is true only of trolls. The make-type procedure is given a name for the type and a descriptor of the properties that are specific to trolls. (Only trolls have a hunger property.) + +``` +(define troll:hunger + (make-property 'hunger 'predicate bias?)) +(define troll? + (make-type 'troll (list troll:hunger))) +``` + +The troll is a specific type of autonomous agent. Thus the set of trolls is a subset of (<=) the set of autonomous agents. + +``` +(set-predicate<=! troll? autonomous-agent?) +``` + +The constructor for trolls is directly derived from the predicate that defines the type, as is the accessor for the hunger property. + +``` +(define make-troll + (type-instantiator troll?)) +(define get-hunger + (property-getter troll:hunger troll?)) +``` + +Autonomous agents are occasionally stimulated by the "clock" to take some action. The distinctive action of the troll is to bite other people. + +``` +(define-clock-handler troll? eat-people!) +``` + +A biased coin is flipped to determine whether the troll is hungry at the moment. If it is hungry it looks for other people (trolls are people too!), and if there are some it chooses one to bite, causing the victim to suffer some damage. The narrator describes what happens. + +``` +(define (eat-people! troll) + (if (flip-coin (get-hunger troll)) +``` + +``` +(let ((people (people-here troll))) + (if (n:null? people) + (narrate! (list (possessive troll) "belly +rumbles") + troll) + (let ((victim (random-choice people))) + (narrate! (list troll "takes a bite out of" + victim) + troll) + (suffer! (random-number 3) victim)))))) +``` + +The procedure flip-coin generates a random fraction between 0 and 1. If that fraction is greater than the argument, it returns true. The procedure random-number returns a positive number less than or equal to its argument. + +The procedure narrate! is used to add narration to the story. The second argument to narrate! (troll in the above code) may be anything that has a location. The narrator announces its first argument in the location thus determined. One can only hear that announcement if one is in that location. + +We said that a troll is a kind of autonomous agent. The autonomous agent type is defined by its predicate, which specifies the properties that are needed for such an agent. We also specify that the set of autonomous agents is a subset of the set of all persons. + +``` +(define autonomous-agent:restlessness + (make-property 'restlessness 'predicate bias?)) +(define autonomous-agent:acquisitiveness + (make-property 'acquisitiveness 'predicate bias?)) +(define autonomous-agent? + (make-type 'autonomous-agent + (list autonomous-agent:restlessness + autonomous-agent:acquisitiveness))) +(set-predicate<=! autonomous-agent? person?) +``` + +The constructor for trolls specified values for the properties restlessness and acquisitiveness, which are needed to make an autonomous agent, in addition to the hunger property specific to + +trolls. Since trolls are autonomous agents, and autonomous agents are persons, there must also be values for the properties of a person and all its supersets. In this system almost all properties have default values that are automatically filled if not specified. For example, all objects need names; the name was specified in the constructor for trolls. But a person also has a health property, necessary to accumulate damage, and this property value was not explicitly specified in the constructor for trolls. + +#### **The generic procedures** + +Now that we have seen how objects are built, we will look at how to implement their behavior. Specifically, we will see how generic procedures are an effective tool for describing complex behavior. + +We defined get-hunger, which is used in eat-people!, in terms of property-getter. A getter for a property of objects of a given type is implemented as a generic procedure that takes an object as an argument and returns the value of the property. + +``` +(define (property-getter property type) + (let ((procedure ; the getter + (most-specific-generic-procedure + (symbol 'get- (property-name property)) + 1 ; arity + #f))) ; default handler + (define-generic-procedure-handler procedure + (match-args type) + (lambda (object) + (get-property-value property object))) + procedure)) +``` + +This shows the construction of a generic procedure with a generated name (for example get-hunger) that takes one argument, and the addition of a handler that does the actual access. The last argument to most-specific-generic-procedure is the default handler for the procedure; specifying #f means that the default is to signal an error. + +We also used define-clock-handler to describe an action to take when the clock ticks. That procedure just adds a handler to a + +generic procedure clock-tick!, which is already constructed. + +``` +(define (define-clock-handler type action) + (define-generic-procedure-handler clock-tick! + (match-args type) + (lambda (super object) + (super object) + (action object)))) +``` + +This generic procedure supports "chaining," in which each handler gets an extra argument (in this case super) that when called causes any handlers defined on the supersets of the given object to be called. The arguments passed to super have the same meaning as the arguments received here; in this case there's just one argument and it is passed along. This is essentially the same mechanism used in languages such as Java, though in that case it's done with a magic keyword rather than an argument. + +The clock-tick! procedure is called to trigger an action, not to compute a value. Notice that the action we specify will be taken after any actions specified by the supersets. We could have chosen to do the given action first and the others later, just by changing the order of the calls. + +The real power of the generic procedure organization is illustrated by the mechanisms for moving things around. For example, when we pick up the engineering book, we move it from the room to our bag. This is implemented with the move! procedure: + +``` +(define (move! thing destination actor) + (generic-move! thing + (get-location thing) + destination + actor)) +``` + +The move! procedure is implemented in terms of a more general procedure generic-move! that takes four arguments: the thing to be moved, the thing's current location, its destination location, and the actor of the move procedure. This procedure is generic because the movement behavior potentially depends on the types of all of the arguments. + +When we create generic-move! we also specify a very general handler to catch cases that are not covered by more specific handlers (for specific argument types). + +``` +(define generic-move! + (most-specific-generic-procedure 'generic-move! 4 #f)) +(define-generic-procedure-handler generic-move! + (match-args thing? container? container? person?) + (lambda (thing from to actor) + (tell! (list thing "is not movable") + actor))) +``` + +The procedure tell! sends the message (its first argument) to the actor that is trying to move the thing. If the actor is the avatar, the message is displayed. + +In the demo we picked up the book. We did that by calling the procedure take-thing with the name engineering-book. This procedure resolves the name to the thing and then calls takething!, which invokes move!: + +``` +(define (take-thing name) + (let ((thing (find-thing name (here)))) + (if thing + (take-thing! thing my-avatar))) + 'done) +(define (take-thing! thing person) + (move! thing (get-bag person) person)) +``` + +There are two procedures here. The first is a user-interface procedure to give the player a convenient way of describing the thing to be taken by giving its name. It calls the second, an internal procedure that is also used in other places. + +To make this work we supply a handler for generic-move! that is specialized to moving mobile things from places to bags: + +``` +(define-generic-procedure-handler generic-move! + (match-args mobile-thing? place? bag? person?) + (lambda (mobile-thing from to actor) + (let ((new-holder (get-holder to))) + (cond ((eqv? actor new-holder) + (narrate! (list actor +``` + +``` +"picks up" mobile-thing) + actor)) + (else + (narrate! (list actor + "picks up" mobile-thing + "and gives it to" new-holder) + actor))) +(if (not (eqv? actor new-holder)) + (say! new-holder (list "Whoa! Thanks, dude!"))) +(move-internal! mobile-thing from to)))) +``` + +If the actor is taking the thing, the actor is the new-holder. But it is possible that the actor is picking up the thing in the place and putting it into someone else's bag! + +The say! procedure is used to indicate that a person has said something. Its first argument is the person speaking, and the second argument is the text being spoken. The move-internal! procedure actually moves the object from one place to another. + +To drop a thing we use the procedure drop-thing to move it from our bag to our current location: + +``` +(define (drop-thing name) + (let ((thing (find-thing name my-avatar))) + (if thing + (drop-thing! thing my-avatar))) + 'done) +(define (drop-thing! thing person) + (move! thing (get-location person) person)) +``` + +The following handler for generic-move! enables dropping a thing. The actor may be dropping a thing from its own bag or it might pick up something from another person's bag and drop it. + +``` +(define-generic-procedure-handler generic-move! + (match-args mobile-thing? bag? place? person?) + (lambda (mobile-thing from to actor) + (let ((former-holder (get-holder from))) + (cond ((eqv? actor former-holder) + (narrate! (list actor + "drops" mobile-thing) + actor)) + (else + (narrate! (list actor +``` + +``` +"takes" mobile-thing + "from" former-holder + "and drops it") + actor))) +(if (not (eqv? actor former-holder)) + (say! former-holder + (list "What did you do that for?"))) +(move-internal! mobile-thing from to)))) +``` + +Yet another generic-move! handler provides for gifting or stealing something, by moving a thing from one bag to another bag. Here the behavior depends on the relationships among the actor, the original holder of the thing, and the final holder of the thing. + +``` +(define-generic-procedure-handler generic-move! + (match-args mobile-thing? bag? bag? person?) + (lambda (mobile-thing from to actor) + (let ((former-holder (get-holder from)) + (new-holder (get-holder to))) + (cond ((eqv? from to) + (tell! (list new-holder "is already carrying" + mobile-thing) + actor)) + ((eqv? actor former-holder) + (narrate! (list actor + "gives" mobile-thing + "to" new-holder) + actor)) + ((eqv? actor new-holder) + (narrate! (list actor + "takes" mobile-thing + "from" former-holder) + actor)) + (else + (narrate! (list actor + "takes" mobile-thing + "from" former-holder + "and gives it to" new-holder) + actor))) + (if (not (eqv? actor former-holder)) + (say! former-holder (list "Yaaaah! I am upset!"))) + (if (not (eqv? actor new-holder)) + (say! new-holder + (list "Whoa! Where'd you get this?"))) + (if (not (eqv? from to)) + (move-internal! mobile-thing from to))))) +``` + +Another interesting case is the motion of a person from one place to another. This is implemented by the following handler: + +``` +(define-generic-procedure-handler generic-move! + (match-args person? place? place? person?) + (lambda (person from to actor) + (let ((exit (find-exit from to))) + (cond ((or (eqv? from (get-heaven)) + (eqv? to (get-heaven))) + (move-internal! person from to)) + ((not exit) + (tell! (list "There is no exit from" from + "to" to) + actor)) + ((eqv? person actor) + (narrate! (list person "leaves via the" + (get-direction exit) "exit") + from) + (move-internal! person from to)) + (else + (tell! (list "You can't force" + person + "to move!") + actor)))))) +``` + +There can be many other handlers, but the important thing to see is that the behavior of the move procedure can depend on the types of all of the arguments. This provides a clean decomposition of the behavior into separately understandable chunks. It is rather difficult to achieve such an elegant decomposition in a traditional objectoriented design, because in such a design one must choose one of the arguments to be the principal dispatch center. Should it be the thing being moved? the source location? the target location? the actor? Any one choice will make the situation more complex than necessary. + +As Alan Perlis wrote: "It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures." + +#### **Implementing properties** + +We saw that the objects in our game are created by defining some properties with make-property, defining a type predicate with + +make-type, getting the predicate's associated instantiator with type-instantiator, and calling that instantiator with appropriate arguments. This simple description hides a complex implementation that is worth exploring. + +The interesting aspect of this code is that it provides a simple and flexible mechanism for managing the properties that are associated with a type instance, which is robust when subtyping is used. Properties are represented by abstract objects rather than names, in order to avoid namespace conflicts when subtyping. For example, a type mammal might have a property named forelimb that refers to a typical front leg. A subtype bat of mammal might have a property with the same name that refers to a different object, a wing! If the properties were specified by their names, then one of these types would need to change its name. In this implementation, the property objects are specified by themselves, and two properties with the same name are distinct. + +The procedure make-property creates a data type containing a name, a predicate, and a default-value supplier. Its first argument is the property's name, and the rest of the arguments are a property list with additional metadata about the property. For example, see the definition of troll:hunger on page 143. We will ignore how the property list is parsed since it's not interesting. 32 + +``` +(define (make-property name . plist) + (guarantee n:symbol? name) + (guarantee property-list? plist) + (%make-property name + (get-predicate-property plist) + (get-default-supplier-property plist))) +``` + +A property is implemented as a Scheme *record* [65], which is a data structure that consists of a set of named fields. It is defined by elaborate syntax that specifies a constructor, a type predicate, and an accessor for each field: + +``` +(define-record-type + (%make-property name predicate default-supplier) + property? + (name property-name) +``` + +``` +(predicate property-predicate) +(default-supplier property-default-supplier)) +``` + +We chose to give the primitive record constructor %make-property a name with an initial percent sign (%). We often use the initial percent sign to indicate a low-level procedure that will not be used except to support a higher-level abstraction. The %make-property procedure is used only in make-property, which in turn is used by other parts of the system. + +Given a set of properties, we can construct a type predicate: + +``` +(define (make-type name properties) + (guarantee-list-of property? properties) + (let ((type + (simple-abstract-predicate name instance-data?))) + (%set-type-properties! type properties) + type)) +``` + +A type predicate is an ordinary abstract predicate (see page 134) along with the specified properties, which are stored in an association using %set-type-properties!. Those specified properties aren't used by themselves; instead they are aggregated with the properties of the supersets of this type. The object being tagged satisfies instance-data?. It is an association from the properties of this type to their values. + +``` +(define (type-properties type) + (append-map %type-properties + (cons type (all-supertypes type)))) +``` + +And type-instantiator builds the instantiator, which accepts a property list using property names as keys, parses that list, and uses the resulting values to create the instance data, which associates each property of this instance with its value. It also calls the setup! procedure, which gives us the ability to do type-specific initialization. + +``` +(define (type-instantiator type) + (let ((constructor (predicate-constructor type)) + (properties (type-properties type))) + (lambda plist + (let ((object +``` + +``` +(constructor (parse-plist plist properties)))) +(set-up! object) +object)))) +``` + +### **Exercise 3.16: Adventure warmup** + +Load the adventure game and start the simulation by executing the command (start-adventure *your-name*). Walk your avatar around. Find some takable object and take it. Drop the thing you took in some other place. + +## **Exercise 3.17: Health** + +Change the representation of the health of a person to have more possible values than are given in the initial game. Scale your representation so that the probability of death from a troll bite is the same as it was before you changed the representation. Also make it possible to recover from a nonfatal troll bite, or other loss of health, by some cycles of rest. + +## **Exercise 3.18: Medical help** + +Make a new place, the medical center. Make it easily accessible from the Green building and the Gates tower. If a person who suffers a nonfatal injury (perhaps from a troll bite) makes it to the medical center, their health may be restored. + +## **Exercise 3.19: A** *palantir* + +Make a new kind of thing called a *palantir* (a "seeing stone," as in Tolkien's *Lord of the Rings*). Each instance of a *palantir* can communicate with any other instance; so if there is a *palantir* in lobby-10 and another in dorm-row, you can observe the goings-on in + +dorm-row by looking into a *palantir* in lobby-10. (Basically, a *palantir* is a magical surveillance camera and display.) + +Plant a few immovable *palantiri* in various parts of the campus, and enable your avatar to use one. Can you keep watch on the positions of your friends? Of the trolls? + +Can you make an autonomous person other than your avatar use a *palantir* for some interesting purpose? The university's president might be a suitable choice. + +## **Exercise 3.20: Invisibility** + +Make an "Invisibility Cloak" that any person (including an avatar) can acquire to become invisible, thus invulnerable to attacks by trolls. However, the cloak must be discarded (dropped) after a short time, because possession of the cloak slowly degrades the person's health. + +# **Exercise 3.21: Your turn** + +Now that you have had an opportunity to play with our "world" of characters, places, and things, extend this world in some substantial way, limited only by your creativity. One idea is to have mobile places, such as elevators, which have entrances and exits that change with time, and are perhaps controllable by persons. But that is just one suggestion—invent something you like! + +### **Exercise 3.22: Multiple players** + +This is a pretty big project rather than a simple exercise. + +- **a.** Extend the adventure game so that there can be multiple players, each controlling a personal avatar. +- **b.** Make it possible for players to be on different terminals. \ No newline at end of file diff --git a/raw/book/설계원칙-194-200.md b/raw/book/설계원칙-194-200.md new file mode 100644 index 0000000..01c7466 --- /dev/null +++ b/raw/book/설계원칙-194-200.md @@ -0,0 +1,66 @@ +## **3.6 Summary** + +The use of generic procedures introduced in this chapter is both powerful and dangerous—it is not for the faint of heart. Allowing the programmer to dynamically change the meanings of the primitive operators of the language can result in unmanageable code. But if we are careful to extend operators to only new types of arguments, without changing their behavior on the original types, we can get powerful extensions without breaking any old software. Most programming languages do not allow the freedom to modify the existing behavior of primitive operators, for good reason. However, many of the ideas here are portable and can be safely used. For example, in many languages, as diverse as C++ and Haskell, one can overload operators to have new meanings on userdefined types. + +Extensions of arithmetic are pretty tame, but we must be aware of the problems that can come up, and the subtle bugs that can be evoked: addition of integers is associative, but addition of floatingpoint numbers is not associative; multiplication of numbers is commutative, but multiplication of matrices is not. And if we extend addition to be concatenation of strings, that extension is not commutative. On the good side, it is straightforward to extend arithmetic to symbolic expressions containing literal numbers as well as purely numerical quantities. It is not difficult, but lots of work, to continue to expand to functions, vectors, matrices, and tensors. However, we eventually run into real problems with the ordering of extensions—symbolic vectors are not the same as vectors with symbolic coordinates! We also can get into complications with the typing of symbolic functions. + +One beautiful example of the power of extensible generics is the almost trivial implementation of forward-mode automatic differentiation by extending each primitive arithmetic procedure to handle differential objects. However, making this work correctly with higher-order functions that return functions as values was + +difficult. (Of course, most programmers writing applications that need automatic differentiation do not need to worry about this complication.) + +In our system the "type" is represented by a predicate that is true of elements of that type. In order to make this efficient we introduced a predicate registration and tagging system that allowed us to add declarations of relationships among the types. For example, we could have prime numbers be a subset of the integers, so numbers that satisfy the user-defined prime? predicate automatically satisfy the integer? predicate. + +Once we have user-defined types with declared subset relationships, we enter a new realm of possibilities. We demonstrated this with a simple but elegantly extensible adventure game. Because our generic procedures dispatch on the types of all of their arguments, the descriptions of the behaviors of the entities in our adventure game are much simpler and more modular than they would be if we dispatched on the first argument to produce a procedure that dispatched on the second argument, and so on. So modeling these behaviors in a typical single-dispatch objectoriented system would be more complicated. + +We used tagged data to efficiently implement extensible generic procedures. The data was tagged with the information required to decide which procedures to use to implement the indicated operations. But once we have the ability to tag data, there are other uses tags can be put to. For example, we may tag data with its provenance, or how it was derived, or the assumptions it was based on. Such audit trails may be useful for access control, for tracing the use of sensitive data, or for debugging complex systems [128]. So there is power in the ability to attach arbitrary tags to any data item, in addition to the use of tags to determine the handlers for generic procedures. + +1 ODE means "ordinary differential equation," meaning a differential equation with a single independent variable. + +- 2 Because we anticipated varying the meanings of many operators in the MIT/GNU Scheme system, we made a special set of operators that name primitive procedures we might need later. We named the copies with the prefix n:. In MIT/GNU Scheme the original primitive procedures are always available, with their original names, in the system-global-environment, so we could have chosen to get them from there. +- 3 A recent Scheme standard [109] introduced "libraries," which provide a way to specify bindings of the free references in a program. We could use libraries to connect an arithmetic with the code that uses it. But here we demonstrate the ideas by modifying the read-eval-print environment. +- 4 The procedure pp prints a list "prettily" by using line breaks and indentation to reveal the list's structure. +- 5 You may have noticed that in these symbolic expressions the additions and multiplications are expressed as binary operations, even though in Scheme they are allowed to take many arguments; the installer implements the *n*-ary versions as nested binary operations. Similarly, the unary - is converted to negate. Subtractions and divisions with multiple arguments are also realized as nested binary operations. +- 6 The procedure default-object produces an object that is different from any possible constant. The procedure defaultobject? identifies that value. +- 7 Another difference you may have noticed is that the constantgenerator and operation-generator procedures for the numeric arithmetic have only one formal parameter, while the generator procedures for the symbolic extender have two. The symbolic arithmetic is built on a base arithmetic, so the constant or operation for the base arithmetic is given to the generator. +- 8 The call (any-arg 3 p1? p2?) will produce an applicability specification with seven cases, because there are seven ways that + +``` +this applicability can be satisfied: ((p2? p2? p1?) (p2? p1? +p2?) (p2? p1? p1?) (p1? p2? p2?) (p1? p2? p1?) (p1? +p1? p2?) (p1? p1? p1?)) +``` + +- 9 disjoin\* is a predicate combinator. It accepts a list of predicates and produces the predicate that is their disjunction. +- 10 Making this arbitrary choice is not really reasonable. For example, a vector's zero is not only distinct from the numerical zero, but also is not the same for vectors of different dimension. We have chosen to ignore this problem here. +- 11 At the APL-79 conference Joel Moses is reported to have said: "APL is like a beautiful diamond—flawless, beautifully symmetrical. But you can't add anything to it. If you try to glue on another diamond, you don't get a bigger diamond. Lisp is like a ball of mud. Add more and it's still a ball of mud—it still looks like Lisp." But Joel denies that he said this. +- 12 A mechanism of this sort is implicit in most "object-oriented languages," but it is usually tightly bound to ontological mechanisms such as inheritance. The essential idea of extensible generics appears in SICP [1] and is usefully provided in tinyCLOS [66] and SOS [52].A system of extensible generics, based on predicate dispatching, is used to implement the mathematical representation system in SICM [121]. A nice exposition of predicate dispatching is given by Ernst [33].The idea that generic procedures are a powerful tool has been percolating in the Lisp community for decades. The fullest development of these ideas is in the Common Lisp Object System (CLOS) [42]. The underlying structure is beautifully expressed in the Metaobject Protocol [68]. It is further elaborated in the "Aspect-oriented programming" movement [67]. +- 13 generic-metadata-getter and generic-metadatadefault-getter retrieve the get-handler procedure and the + +- get-default-handler procedure from the dispatch-store instance stored in the metadata of the generic procedure. +- 14 The term *automatic differentiation* was introduced by Wengert [129] in 1964. +- 15 The derivative here is the derivative of a function, not the derivative of an expression. If *f* is a function, the derivative *Df* of *f* is a new function, which when applied to *x* gives a value *Df* (*x*). Its relation to an expression derivative is: + +$$Df(t) = \frac{d}{dx}f(x)\Big|_{x=t}$$ + +- 16 The automatic differentiation code we present here is derived from the code that we wrote to support the advanced classical mechanics class that Sussman teaches at MIT with Jack Wisdom [121, 122]. +- 17 Differential objects like these are sometimes referred to as *dual numbers*. Dual numbers, introduced by Clifford in 1873 [20], extend the real numbers by adjoining one new element *E* with the property *є* 2 = 0. However, in order to conveniently compute multiple derivatives (and derivatives of functions with multiple arguments) it helps to introduce a new infinitesimal part for each independent variable. So our differential algebra space is much more complicated than the single-*E* dual number space. Our differential objects are also something like the hyperreal numbers, invented by Edwin Hewitt in 1948 [59]. +- 18 This idea was "discovered" by Dan Zuras (then of Hewlett Packard Corporation) and Gerald Jay Sussman in an all-night programming binge in 1992. We assumed at the time that this had also been discovered by many others, and indeed it had [129, 12], but we were overjoyed when we first understood the idea + +- ourselves! See [94] for a formal exposition of automatic differentiation. +- 19 We will get to binary functions soon. This is just to make the idea clear before things get complicated. We will extend to *n*-ary functions in section 3.3.2 +- 20 We are showing the definitions of handlers but we are not showing the assignment of the handlers here. +- 21 For an alternative strategy, see exercise 3.8 on page 113. +- 22 The procedure iota returns a list of consecutive integers from 0 through (length args). +- 23 The formal algebraic details were clarified by Hal Abelson around 1994, as part of an effort to fix a bug. The code was painfully reworked in 1997 by Sussman with the help of Hardy Mayer and Jack Wisdom. +- 24 A nicer version would use record structures, but that would be harder to debug without having a way to print them nicely. +- 25 The fact that any factor of any highest-order term in the series can be used was a central insight of Hal Abelson in the 1994 revision of this idea. +- 26 A bug of this class was pointed out to us by Alexey Radul in 2011. The general problem was first identified by Siskind and Perlmutter in 2005 [111]: the differential tags created to distinguish the infinitesimals incrementing an argument for a derivative calculation can be confused in the evaluation of a derivative of a function whose value is a function. The deferred derivative procedure may be called more than once, using the tag that was created for the outer derivative calculation. More recently, Jeff Siskind showed us another bug that plagued our patch for the first one: there was a potential collision between a tag occurring in an argument and a tag inherited from the lexical scope of a derivative function. These very subtle bugs are + +- explained, along with a careful analysis of ways to fix them, in a beautiful paper by Manzyuk et al. [87]. +- 27 This is carefully explained in Manzyuk et al. [87]. +- 28 The trie data structure was invented by Edward Fredkin in the early 1960s. +- 29 The names printed for predicates by with-predicate-counts do not end in a question mark; for example the name printed for the predicate number? is simply number. The reason for this is obscure, and the curious are welcome to track it down in the code. +- 30 The procedure is-generic-handler-applicable? abstracts the handler checking that we previously did using predicatesmatch? in get-handler on page 98. This gives us a hook for later elaboration. +- 31 In languages such as Haskell and Smalltalk, multiple arguments are handled by dispatching on the first argument, producing an object that then dispatches on the second argument, etc. +- 32 The make-property procedure uses a helper called guarantee to do argument checking. The first argument to guarantee is a predicate (preferably a registered predicate) and the second argument is an object to be tested. There may be a third argument, to identify the caller. If the object doesn't satisfy the predicate, guarantee signals an error. The procedure guarantee-list-of works similarly except that it requires the object to be a list of elements satisfying the predicate. +- We have used assert earlier in this text. assert is more convenient for posing assertions that must be true where they are made. guarantee is preferable for the more restricted case of argument type checking. \ No newline at end of file diff --git a/raw/book/설계원칙-201-286.md b/raw/book/설계원칙-201-286.md new file mode 100644 index 0000000..ed251ea --- /dev/null +++ b/raw/book/설계원칙-201-286.md @@ -0,0 +1,2632 @@ +# **Pattern Matching** + +*Pattern matching* is a technology that supports the creation of domain-specific languages and other systems that should have an additive character. + +Pattern matching is a generalization of equality testing. In equality testing we compare two objects to determine that they have the same structure and contents. In pattern matching, we generalize equality testing to allow some parts of the structure and contents to be unspecified. A *pattern* specifies certain parts of the data exactly, but it has "holes" (*pattern variables*) that match the unspecified parts of the data. We may impose constraints on what a pattern variable can match, and we may require that multiple instances of the same pattern variable match the same thing. + +A pattern can be matched to a part of a larger datum; the context of the match is unspecified. The ability to work with partial information means that only the specified parts of the pattern are assumptions about the data matched; there are few or no assumptions about the unspecified parts. + +This property of pattern matching enables the construction of very flexible rule-based systems. In a rule-based system one can add new rules to add new capabilities, though there are difficulties associated with how rules are defined and how they interact with one another. For example, if more than one rule is applicable, the results may depend on the ordering of application. We already encountered problems with the interaction of rules, in the boardgame rule interpreter. (See the critique on page 63.) + +Besides the use of patterns to match data that meets a partial specification, patterns can themselves represent partially known information. Merging such patterns (*unification*) can generate more specific information than the individual patterns contribute. + +Another use of pattern matching is as a generalization of generic procedures. Generic procedures allow us to do miraculous things by modulating the meanings of the free variables in a program. We may think of the program that employs a generic procedure, such as that bound to +, as advertising for a handler that can do the job of "+ing" the arguments supplied. A handler attached to a generic procedure is applicable if the arguments supplied satisfy the predicates provided when it was attached. But the language for advertising jobs that need to be done is rather limited—all we have is a single symbol, in this case +. If we instead use patterns to advertise jobs to be done and other patterns to advertise procedures that might do those jobs, we have a much richer language: *patterndirected invocation*. + +## **4.1 Patterns** + +The elementary laws of algebra can be expressed as equivalence of patterns: + +$$a \times (b+c) \iff a \times b + a \times c$$ + +This is the distributive law of multiplication over addition. It says that we can replace one side with the other without changing the value of the expression. Each side of the law is a pattern, with pattern variables *a*, *b*, and *c*, and pattern constants × and +. What the law says is that if we find an algebraic expression that is the product of something and a sum of terms, we can replace it with a sum of two products, and vice versa. + +Let's see how to organize programs based on pattern matching. A key idea here will be compilation of patterns into combinators that are the pieces of a matcher. In section 4.2 we will demonstrate this in a term-rewriting system for elementary algebra. + +#### **A Language of Patterns** + +The first job is to make up our language of patterns. We will start with something simple. We will make our patterns out of Lisp (Scheme) lists. Unlike the mathematical example above, we will not have reserved symbols, such as and +, so we will have to distinguish pattern variables from pattern constants. A pattern variable can be represented by a list beginning with the query symbol, ?. This is a traditional choice. So in this language the patterns that make up the distributive law may be represented as follows, assuming that we are manipulating Lisp prefix mathematical expressions: + +``` +(* (? a) (+ (? b) (? c))) +(+ (* (? a) (? b)) (* (? a) (? c))) +``` + +You might complain that we could have used distinguished symbols, such as ?a instead of the long-winded (? a). That would be fine, but that choice would make it a bit harder to extend, say if we want a variable that is restricted to match only numbers. Of course, we can add syntax later if it is helpful, but remember Alan Perlis's maxim: "Syntactic sugar causes cancer of the semicolon." With our simple list representation we are able to restrict the pattern variable (? a) to match only numbers by adding the predicate describing the restriction to its list representation: (? a ,number?). + +One constraint on our design of the matcher is that the second pattern above should match + +``` +(+ (* (cos x) (exp y)) (* (cos x) (sin z))) +where a=(cos x), b=(exp y), and c=(sin z). + But it should not match +``` + +``` +(+ (* (cos x) (exp y)) (* (cos (+ x y)) (sin z))) +``` + +because there is no consistent assignment possible for (? a), unless, somehow, x=(+ x y). [1](#page-82-0) We will learn about that sort of situation when we study unification matching in section 4.4; here we will decide that there is no match possible. + +Another constraint on the matcher, which will have an important influence on its structure, is the need to match an unknown number of consecutive elements in a list. For example, suppose we want to make a rule to replace a sum of squares of a sine and a cosine with 1, even if they are not consecutive in the sum: + +``` +(+ ... (expt (sin theta) 2) ... (expt (cos theta) 2) ...) +(+ 1 ... ... ...) +``` + +The ... here may stand for many terms. We will use a *segment variable*, written with the prefix ??, to match many terms. So the pattern we will write is: + +``` +(+ (?? t1) + (expt (sin (? x)) 2) + (?? t2) + (expt (cos (? x)) 2) + (?? t3)) +``` + +We needed three segment variables here. The segment variable (?? t1) will match the terms before the sine term, (?? t2) will match the terms between the sine term and the cosine term, and (?? t3) will match the terms after the cosine term. + +Segment variables have a profound effect, because we don't know how long a segment is until we find the next part that matches, and we may be able to match the same data item many ways. For example, there may be squares of both sines and cosines of two different angles in the same sum. Even simpler, the pattern + +``` +(a (?? x) (?? y) (?? x) c) +``` + +can match the datum + +``` +(a b b b b b b c) +``` + +in four different ways. (Notice that the segment variable x must eat up the same number of bs in the two places it appears in the pattern.) So the matcher must do a search over the space of possible assignments to the segment variables. + +## **4.2 Term rewriting** + +Term-rewriting systems are powerful tools for creating domainspecific languages for manipulating expression-like information. If we have a syntactic system of expressions, where we may need to replace some subexpressions with "equivalent" subexpressions, we can often use a rule-based term-rewriting system to describe those transformations. For example, many compiler optimizations can be expressed as local rewrites of program fragments in a larger context. The essential features of a term-rewriting system are the use of a pattern matcher to identify the information to be transformed, and a template system for instantiating the replacement. There has been extensive research [72] into the problem of constructing convergent term-rewriting systems from equational theories (systems of "equivalent" expressions), but we won't get into that here. Also, there is a superficial similarity between the patterns matched against and the templates for instantiation, which may suggest the possibility of making bidirectional rules; we won't look at that either. First we develop a simple unidirectional system, in which patterns are used to recognize inputs and templates are used to make outputs. + +Here is an approximation to some algebraic simplification rules: + +``` +(define algebra-1 + (rule-simplifier + (list + ;; Associative law of addition + (rule '(+ (? a) (+ (? b) (? c))) + '(+ (+ ,a ,b) ,c)) + ;; Commutative law of multiplication + (rule '(* (? b) (? a)) + (and (expr2 bubble sort on the terms of a sum and the factors of a product. This can get pretty bad if there are many terms, as in a serious algebra problem. Is there some way in this system to make a more efficient sort? If not, why not? If so, how would you arrange it? + +## **Exercise 4.4: Collecting terms** + +The system we have described does not collect like terms. For example: + +``` +(algebra-2 '(+ (* 4 x) (* 3 x))) +(+ (* 3 x) (* 4 x)) +``` + +Make a new system algebra-3 that includes rules that cause the collection of like terms, leaving the result as a sum of terms. Demonstrate your solution. Your solution must be able to handle problems like + +``` +(algebra-3 + '(+ y (* x -2 w) (* x 4 y) (* w x) z (* 5 z) (* x w) (* x y +3))) +(+ y (* 6 z) (* 7 x y)) +``` + +#### **4.2.2 Implementation of rule systems** + +Now that we have some experience with the use of a pattern-based rule system, let's dive in to see how it works. + +We implement a rule as a procedure that matches the rule's pattern against a given expression. If the match succeeds, the rule evaluates its consequent in an environment in which the pattern variables are bound to their matched data. Rule procedures take success and failure continuations that can be used to backtrack into the consequent or pattern-match part of a rule. [2](#page-82-1) + +The rule-simplifier procedure used above is a constructor for a simple recursive simplifier. It produces simplify-expression, a procedure that takes an expression and uses the rules to simplify the expression. It recursively simplifies all the subexpressions of an + +expression and then applies the rules to simplify the resulting expression. It does this repeatedly until the process converges. Thus the expression returned is a fixed point of the simplification process. + +``` +(define (rule-simplifier the-rules) + (define (simplify-expression expression) + (let ((subexpressions-simplified + (if (list? expression) + (map simplify-expression expression) + expression))) + (try-rules subexpressions-simplified the-rules + (lambda (result fail) ; A: success continuation + (simplify-expression result)) + (lambda () ; B: failure continuation + subexpressions-simplified)))) + simplify-expression) +``` + +The procedure try-rules just scans the list of rules, sequencing the scan by means of the succeed and fail continuations. + +``` +(define (try-rules data rules succeed fail) + (let per-rule ((rules rules)) + (if (null? rules) + (fail) ; out of rules: go to B above + (try-rule data + (car rules) + succeed ; if rule succeeds go to A above + (lambda () ; if rule fails try other rules + (per-rule (cdr rules))))))) +(define (try-rule data rule succeed fail) + (rule data succeed fail)) +``` + +Rule construction is implemented by the procedure make-rule, which takes a rule pattern and a handler that implements the consequent expression. For example, the commutative law rule on page 161 can be made directly with make-rule: + +``` +(make-rule '(* (? b) (? a)) + (lambda (b a) + (and (exprNow that we have seen some of the power of pattern matching, we will explore how it works. Our matcher is constructed from a family of match procedures (or *matchers*), and some combinators that combine them to produce compound matchers. [3](#page-82-2) Each primitive element of the pattern is represented by a primitive matcher, and the only combination, list, is represented by a combinator that combines matchers for the list elements to make a compound one. + +All match procedures take three arguments: a list containing data to be matched, a dictionary of bindings of pattern variables, and a continuation procedure (succeed) to be called if the match is successful. The arguments to succeed must be the new dictionary resulting from the match and the number of items that were consumed from the input list. This number will be used for determining where to proceed after a segment match returns. A match procedure returns #f if the match is unsuccessful. + +There are three primitive match procedures and one combinator. Let's go through them. We will also need a small procedure that we can pass to a match procedure as its succeed argument to report the result: + +``` +(define (result-receiver dict n-eaten) + '(success ,(match:bindings dict) ,n-eaten)) +``` + +#### **Pattern constants** + +The procedure match:eqv takes a pattern constant, such as x, and produces a match procedure, eqv-match, that succeeds if and only if the first data item is equal (using eqv?) to the pattern constant. It does not add to the dictionary. The second argument to succeed is the number of items matched, which is 1 for this match procedure. + +``` +(define (match:eqv pattern-constant) + (define (eqv-match data dictionary succeed) + (and (pair? data) + (eqv? (car data) pattern-constant) + (succeed dictionary 1))) + eqv-match) +``` + +### For example: + +``` +(define x-matcher (match:eqv 'x)) +(x-matcher '(x) (match:new-dict) result-receiver) +(success () 1) +(x-matcher '(y) (match:new-dict) result-receiver) +#f +``` + +#### **Element variables** + +The procedure match:element is used to make a match procedure, element-match, for a pattern variable, such as (? x), that is intended to match a single item. + +When matching an *element variable* there are two possibilities: either the element variable already has a value or it does not yet have a value. If the variable has a value, it is bound in the dictionary. In that case the match succeeds if and only if the binding's value is equal (using equal?) to the first data item. If the variable does not have a value, it is not bound. In that case the match succeeds, extending the dictionary by adding a binding of the variable to the first data item. In either case of success, we indicate that the number of items consumed is 1. + +``` +(define (match:element variable) + (define (element-match data dictionary succeed) + (and (pair? data) + (let ((binding (match:lookup variable dictionary))) + (if binding + (and (equal? (match:binding-value binding) + (car data)) + (succeed dictionary 1)) + (succeed (match:extend-dict variable + (car data) + dictionary) + 1))))) + element-match) +``` + +Here are some examples. A match binding is a list: the first element is the variable name; the second element is the value; and the third element is the variable's type (here all are ? element variables). + +``` +((match:element '(? x)) +'(a) (match:new-dict) result-receiver) +(success ((x a ?)) 1) +((match:element '(? x)) +'(a b) (match:new-dict) result-receiver) +(success ((x a ?)) 1) +``` + +``` +((match:element '(? x)) +'((a b) c) (match:new-dict) result-receiver) +(success ((x (a b) ?)) 1) +``` + +#### **Segment variables** + +The procedure match:segment is used to make a match procedure, segment-match, for a pattern variable, such as (?? x), that is intended to match a sequence of items. A segment-variable matcher is more complicated than an element-variable matcher because it can consume an unknown number of data items. Thus a segment matcher must inform its caller not only of the new dictionary, but also of how many items from the data were eaten. + +When matching a segment variable there are two possibilities: either the segment variable already has a value or it does not yet have a value. If the segment variable has a value, the value must match the data; this is checked by match:segment-equal? on page 174. If the segment variable does not yet have a value, it must be given one. + +The matcher, segment-match, returned by match:segment, succeeds with some initial sublist of the data, (list-head data i), as a possible assignment to the segment variable. (It starts with i=0, assuming that the segment will eat no items from the data.) However, if that success leads to a later failure in the match, the segment matcher tries to eat one more element than it had already tried (by executing (lp (+ i 1))). If the segment matcher runs out of data items, it fails to match. This is the key to the backtracking search that is needed when there are segment variables. + +``` +(define (match:segment variable) + (define (segment-match data dictionary succeed) + (and (list? data) + (let ((binding (match:lookup variable dictionary))) + (if binding + (match:segment-equal? + data + (match:binding-value binding) + (lambda (n) (succeed dictionary n))) +``` + +``` +(let ((n (length data))) + (let lp ((i 0)) + (and (<= i n) + (or (succeed (match:extend-dict + variable + (list-head data i) + dictionary) + i) + (lp (+ i 1)))))))))) + segment-match) + For example: +((match:segment '(?? a)) + '(z z z) (match:new-dict) result-receiver) +(success ((a () ??)) 0) +``` + +Of course, a zero-length segment is okay. + +If we want to see all of the possible matches, we change the result receiver to return #f after printing the successful result. This causes the matcher procedure to come up with an alternative value, if possible. + +``` +(define (print-all-results dict n-eaten) + (pp '(success ,(match:bindings dict) ,n-eaten)) + ;; by returning #f we force backtracking. + #f) +((match:segment '(?? a)) + '(z z z) (match:new-dict) print-all-results) +(success ((a () ??)) 0) +(success ((a (z) ??)) 1) +(success ((a (z z) ??)) 2) +(success ((a (z z z) ??)) 3) +#f +``` + +Now, returning to the case of a segment variable that already has a value, we need to make sure that the value matches an initial segment of the data. This is handled by match:segment-equal?. It compares the elements of the value against the data. If that works, it returns by calling ok (the procedure passed as its third argument) with the number of elements consumed from the data (which must be the length of the value); otherwise it returns #f. + +``` +(define (match:segment-equal? data value ok) + (let lp ((data data) (value value) (n 0)) + (cond ((pair? value) + (if (and (pair? data) + (equal? (car data) (car value))) + (lp (cdr data) (cdr value) (+ n 1)) + #f)) + ((null? value) (ok n)) + (else #f)))) +``` + +#### **Matching lists** + +Finally, there is the match:list combinator, which takes a list of match procedures and makes a match procedure that matches a data list if and only if the given matchers eat up all of the elements in the data list. It applies the matchers in succession. Each matcher tells the list combinator how many items to jump over before passing the remaining data to the next matcher. + +``` +(define (match:list matchers) + (define (list-match data dictionary succeed) + (and (pair? data) + (let lp ((data-list (car data)) + (matchers matchers) + (dictionary dictionary)) + (cond ((pair? matchers) + ((car matchers) + data-list + dictionary + (lambda (new-dictionary n) + ;; The essence of list matching: + (lp (list-tail data-list n) + (cdr matchers) + new-dictionary)))) + ((pair? data-list) #f) ;unmatched data + ((null? data-list) (succeed dictionary 1)) + (else #f))))) + list-match) +``` + +Notice that the matcher, list-match, returned by the match:list combinator has exactly the same interface as the other matchers, allowing it to be incorporated into a combination. The fact that all of + +the basic match procedures have exactly the same interface makes this a system of combinators. + +Now we can make a matcher that matches a list of any number of elements, starting with the symbol a, ending with the symbol b, and with a segment variable (?? x) between them, by the combination: + +``` +((match:list (list (match:eqv 'a) + (match:segment '(?? x)) + (match:eqv 'b))) + '((a 1 2 b)) + (match:new-dict) + result-receiver) +(success ((x (1 2) ??)) 1) +``` + +This was a successful match. The dictionary returned has exactly one entry: x=(1 2), and the match ate precisely one element (the list (a 1 2 b)) from the list supplied. + +``` +((match:list (list (match:eqv 'a) + (match:segment '(?? x)) + (match:eqv 'b))) + '((a 1 2 b 3)) + (match:new-dict) + result-receiver) +#f +``` + +This was a failure, because there was nothing to match the 3 after the b in the input data. + +### **The dictionary** + +The dictionary we will use is just a headed list of bindings. Each binding is a list of the variable's name, its value, and its type. + +``` +(define (match:new-dict) + (list 'dict)) +(define (match:bindings dict) + (cdr dict)) +(define (match:new-bindings dict bindings) + (cons 'dict bindings)) +``` + +``` +(define (match:extend-dict var value dict) + (match:new-bindings dict + (cons (match:make-binding var value) + (match:bindings dict)))) +(define (match:lookup var dict) + (let ((name + (if (symbol? var) + var + (match:var-name var)))) + (find (lambda (binding) + (eq? name (match:binding-name binding))) + (match:bindings dict)))) +(define (match:make-binding var value) + (list (match:var-name var) + value + (match:var-type var))) +(define match:binding-name car) +(define match:binding-type caddr) +(define match:binding-value + (simple-generic-procedure 'match:binding-value 1 cadr)) +``` + +The accessor match:binding-value is just cadr, but is made generic to allow future extensions. This will be needed in the code supporting section 4.5. + +#### **4.3.1 Compiling patterns** + +We can automate the construction of pattern matchers from patterns with an elementary compiler. The compiler produces as its value a match procedure appropriate for the pattern it is given, which has exactly the same interface as the elementary matchers given above. + +The match-procedure interface is convenient for composing matchers, but not very friendly to humans. For playing with the matcher it is more convenient to use: + +``` +(define (run-matcher match-procedure datum succeed) + (match-procedure (list datum) + (match:new-dict) + (lambda (dict n) +``` + +``` +(and (= n 1) + (succeed dict))))) +``` + +With this interface we are hiding several details about match procedures: we wrap the incoming datum in a list; we check that exactly one element of that list (the datum) has been matched; and we provide the initial dictionary. + +Some simple examples are: + +``` +(run-matcher + (match:compile-pattern '(a ((? b) 2 3) (? b) c)) + '(a (1 2 3) 2 c) + match:bindings) +#f +(run-matcher + (match:compile-pattern '(a ((? b) 2 3) (? b) c)) + '(a (1 2 3) 1 c) + match:bindings) +((b 1 ?)) +``` + +As we saw before, some patterns involving segment variables may match in many ways, and we can elicit all of the matches by failing back into the matcher to select the next one, until they are all exhausted: + +``` +(run-matcher + (match:compile-pattern '(a (?? x) (?? y) (?? x) c)) + '(a b b b b b b c) + print-all-matches) +((y (b b b b b b) ??) (x () ??)) +((y (b b b b) ??) (x (b) ??)) +((y (b b) ??) (x (b b) ??)) +((y () ??) (x (b b b) ??)) +#f +``` + +The possible matches require both instances of (?? x) to match the same data. + +The procedure print-all-matches prints the bindings and forces a failure. + +``` +(define (print-all-matches dict) + (pp (match:bindings dict)) + #f) +``` + +To make this compiler we need to define the syntax of pattern variables. For now we have a very simple syntax: a pattern variable is a list of the type (? or ??) and the name. + +``` +(define (match:var-type var) + (car var)) +(define (match:var-type? object) + (memq object match:var-types)) +(define match:var-types '(? ??)) +(define (match:named-var? object) + (and (pair? object) + (match:var-type? (car object)) + (n:>= (length object) 2) + (symbol? (cadr object)))) +(define (match:element-var? object) + (and (match:var? object) + (eq? '? (match:var-type object)))) +(define (match:segment-var? object) + (and (match:var? object) + (eq? '?? (match:var-type object)))) +``` + +This code is more complex than one might expect, because we will extend the variable syntax in section 4.5 and some of the exercises. + +``` +(define match:var-name + (simple-generic-procedure 'match:var-name 1 + (constant-generic-procedure-handler #f))) +(define-generic-procedure-handler match:var-name + (match-args match:named-var?) + cadr) +``` + +The default handler is a procedure that always returns false, and at this time there is only one substantive handler, which retrieves the name of a named variable. + +We also make the predicate that determines if its argument is a match variable generic, although at this time the only objects that satisfy match:var? are named variables. + +``` +(define match:var? + (simple-generic-procedure 'match:var? 1 + (constant-generic-procedure-handler #f))) +(define-generic-procedure-handler match:var? + (match-args match:named-var?) + (constant-generic-procedure-handler #t)) +``` + +The compiler maps a pattern to the corresponding matcher: + +``` +(define (match:compile-pattern pattern) + (cond ((match:var? pattern) + (case (match:var-type pattern) + ((?) (match:element pattern)) + ((??) (match:segment pattern)) + (else (error "Unknown var type:" pattern)))) + ((list? pattern) + (match:list (map match:compile-pattern pattern))) + (else ; constant + (match:eqv pattern)))) +``` + +By varying this compiler, we can change the syntax of patterns any way we like. + +``` +(run-matcher + (match:compile-pattern '(a ((? b) 2 3) (? b) c)) + '(a (1 2 3) 1 c) + match:bindings) +((b 1 ?)) +``` + +## **Exercise 4.5: Backtracking** + +In the example on page 177 we got multiple matches, by returning #f from the success procedure print-all-matches. This is probably pretty mysterious. How does it work? Explain, in a short but clear paragraph, how the sequence of matches is generated. + +#### **4.3.2 Match-variable restrictions** + +Often we want to restrict the kind of object that can be matched by a pattern variable. For example, we may want to make a pattern in which a variable can match only a positive integer. One way to do + +this, which we used in our term-rewriting system in section 4.2.1, is to allow a variable to carry a predicate for testing the datum for acceptability. For example, we may be interested in finding positive integer powers of sine functions. We could write the pattern we want as follows: + +``` +'(expt (sin (? x)) (? n ,exact-positive-integer?)) +``` + +We cannot use simple quotation for such a pattern, because the predicate expression (here exact-positive-integer?) must be evaluated before being included in the pattern. As in term rewriting (section 4.2), we use the backquote mechanism to do this. + +To make a matcher that can check that data satisfies such a predicate, we add a single line to match:element: + +``` +(define (match:element variable) + (define (element-match data dictionary succeed) + (and (pair? data) + (match:satisfies-restriction? variable (car data)) + (let ((binding (match:lookup variable dictionary))) + (if binding + (and (equal? (match:binding-value binding) + (car data)) + (succeed dictionary 1)) + (succeed (match:extend-dict variable + (car data) + dictionary) + 1))))) + element-match) +(define (match:satisfies-restriction? var value) + (or (not (match:var-has-restriction? var)) + ((match:var-restriction var) value))) +``` + +## **Exercise 4.6: Pattern alternatives: choice is good** + +An interesting way to extend our pattern language is to introduce a choice operator: + +``` +(?:choice pattern ...) +``` + +This should compile into a matcher that tries to match each of the given *pattern*s in order from left to right, returning the first successful match, or #f if none match. (This should remind you of regular expression "alternation" (see page 40), but the name "choice" is more traditional in pattern matching.) + +#### For example: + +``` +(run-matcher + (match:compile-pattern '(?:choice a b (? x) c)) + 'z + match:bindings) +((x z ?)) +(run-matcher + (match:compile-pattern + '((? y) (?:choice a b (? x ,string?) (? y ,symbol?) c))) + '(z z) + match:bindings) +((y z ?)) +(run-matcher + (match:compile-pattern '(?:choice b (? x ,symbol?))) + 'b + print-all-matches) +() +((x b ?)) +#f +``` + +**To do:** Implement a new matcher procedure, match:choice, for this new pattern schema. Augment the pattern compiler appropriately. + +## **Exercise 4.7: Naming in patterns** + +Another extension is to provide named patterns, analogous to Scheme's letrec. + +Naming allows shorter, more modular patterns while also supporting recursive subpatterns, including mutually recursive subpatterns. + +For instance, the pattern: + +``` +(?:pletrec ((odd-even-etc (?:choice () (1 (?:ref even-odd- +etc)))) + (even-odd-etc (?:choice () (2 (?:ref odd-even- +etc))))) + (?:ref odd-even-etc)) +``` + +should match all lists of the following form (including the empty list): + +``` +(1 (2 (1 (2 (1 ...))))) +``` + +Here, ?:pletrec introduces a block of mutually recursive pattern definitions while ?:ref substitutes a defined pattern in place (in order to distinguish such references from literal symbols like a and from pattern variables like (? x)). + +**To do:** Implement these new ?:pletrec and ?:ref pattern schemas. One approach is to implement new matcher procedures, match:pletrec and match:ref, then augment the pattern compiler appropriately. Other approaches may also work. Explain your approach briefly if it is subtle or non-obvious. + +**To think (before you do!):** In a proper environment-based letrec-like implementation, nested ?:pletrec instances would introduce distinct contour lines for scoping. But the control structure of our pattern matcher does not make this easy. + +The matcher procedures traverse the pattern and data in left-toright depth-first order, binding the first textual appearance of each distinct pattern variable (like (? x)) to its corresponding datum and then treating each subsequent textual appearance in the pattern as a constraining instance. This is achieved by threading the dictionary through the depth-first control path. Pay particular attention to the appearance of new-dictionary in the body of match:list. This control structure, in essence, decrees that the leftmost, deepest instance of each unique pattern variable is a defining instance in an implicit flat global namespace, with all subsequent downstream appearances being constraining instances. + +So let's not worry about that scoping complexity in this exercise. Specifically, just as pattern variables all share a common global namespace, so too can your pattern definitions. + +Of course, if you are really ambitious, you can implement lexical scoping by rewriting all the existing matcher interfaces to accept an extra pattern-environment parameter. But that is a job for another time and place (in exercise 4.9). + +## **Exercise 4.8: Hoist by our own petard** + +On the surface it may appear that it would be easy to extend this matcher system to allow vector patterns and vector data. But we made a strong assumption in the design of this matcher—that it is a matcher of list patterns on list data. + +- **a.** What would it take to liberate this code from that assumption so that you could make a matcher that encompassed both kinds of compound data? Or arbitrary sequences? What sorts of changes are required? Do you need to change the interface to a match procedure? +- **b.** Make it so! (This is lots of work.) + +## **Exercise 4.9: General pattern language** + +Even with the addition of ?:pletrec and ?:ref in exercise 4.7, the pattern matcher we have is not a complete language, in that it does not support namespace scoping and parametric patterns. For example, we cannot write the following pattern, which is intended to match only lists of symbols that are palindromes. + +``` +(?:pletrec ((palindrome + (?:pnew (x) + (?:choice () + ((? x ,symbol?) + (?:ref palindrome) + (? x)))))) + (?:ref palindrome)) +``` + +For this to work in any reasonable way, ?:pnew creates fresh lexically scoped pattern variables that can be referred to only in the body of the ?:pnew. + +A fully worked-out pattern language is a wonderful subsystem to have, but it is not easy to build. + +**To do:** Flesh out this idea to produce a full pattern language. Not for the faint of heart! + +## **4.4 Unification match** + +Pattern matching is, as we have said, a kind of equality testing between structured data items. It is a generalization of equality testing because we allow some parts of the data to be unspecified, by allowing pattern variables that match the unspecified parts of the data. But we require that every occurrence of the same pattern variable must match equivalent data. + +So far our matchers have been one-sided: we match a pattern with variables against data that contains no variables, producing a dictionary—a map from each variable in the pattern to a matching piece of the data. If we substitute the matching value for each variable into the original pattern we make a *substitution instance* of the pattern. The resulting instance is always equivalent to the original data. + +We are about to remove the limitation that the data has no variables: we will allow variables on both sides of the match. This powerful kind of match is called *unification*. The result of a successful unification is also a dictionary, but the values for variables may contain variables, and the dictionary may not give values for every variable in the patterns. If we substitute the values associated with variables in the dictionary for variables that appear in either of the two given patterns, we obtain a substitution instance of both initial patterns. This substitution instance, which may contain variables, is called the *unifier* of the patterns. The unifier is the most general common substitution instance of the two patterns: + +any other common substitution instance of the two patterns is a substitution instance of the unifier. The unifier is unique, up to renaming of the variables, so unification is well defined. [4](#page-82-3) + +Unification was first described by J. A. Robinson in his famous invention of the resolution procedure for theorem proving [104]. [5](#page-82-4) + +For a simple example, suppose we have several sources of partial information about Ben Franklin's dates of birth and death: + +``` +(define a + '(((? gn) franklin) (? bdate) ((? dmo) (? dday) 1790))) +(define b + '((ben franklin) ((? bmo) 6 1705) (apr 17 (? dyear)))) +(define c + '((ben (? fn)) (jan (? bday) 1705) (apr 17 (? dyear)))) +``` + +The unification of two expressions will give us a dictionary of the values of the variables that are derived from the match. We can use that dictionary to construct the unifier of the two patterns: + +``` +(unifier a b) +((ben franklin) ((? bmo) 6 1705) (apr 17 1790)) +(unifier a c) +((ben franklin) (jan (? bday) 1705) (apr 17 1790)) +(unifier b c) +((ben franklin) (jan 6 1705) (apr 17 (? dyear))) +``` + +Each of these results is more fully specified than the partial information provided by any source. We can further combine all three sources to get a full picture: + +``` +(unifier a (unifier b c)) +((ben franklin) (jan 6 1705) (apr 17 1790)) +(unifier b (unifier a c)) +((ben franklin) (jan 6 1705) (apr 17 1790)) +(unifier c (unifier a b)) +((ben franklin) (jan 6 1705) (apr 17 1790)) +``` + +Often there are constraints among the variables in an expression. For example, there may be multiple instances of the same variable, which must remain consistent, as in the following derivation: + +``` +(define addition-commutativity + '(= (+ (? u) (? v)) (+ (? v) (? u)))) +(unifier '(= (+ (cos (? a)) (exp (? b))) (? c)) + addition-commutativity) +(= (+ (cos (? a)) (exp (? b))) (+ (exp (? b)) (cos (? a)))) +``` + +#### **4.4.1 How unification works** + +We can think of unification as a kind of equation solving. If we think of the patterns as structured partial information, unifying them is testing the proposition that the two patterns are partial information about the same thing. For the patterns to unify, the corresponding parts must unify. So unification is setting up equations among the corresponding parts and solving for the unknowns (the pieces of information left unspecified in each pattern). + +The process is analogous to the way we solve numerical equations. The goal is to eliminate as many variables in the equations as we can. The result is a list of substitutions of expressions for the eliminated variables. No substitution expression may refer to any eliminated variable. We scan the equations for one that can be solved for one of the variables in it. Solving for a variable isolates it, finding an equivalent expression that does not contain the variable. We eliminate the variable by replacing all occurrences of it with its the newly discovered value (the equivalent expression), both in the remaining equations and in the values associated with previously eliminated variables in the substitution list. We then add the new substitution to the substitution list. We repeat until there are no more equations to be solved or we encounter a contradiction. The result is either a successful substitution list or a report of the contradiction. + +In unification the "equations" are the matches of the corresponding parts of the two input patterns, and the "substitution + +list" is the dictionary. One way to implement unification is to walk the common structure of the input patterns. As in one-sided matching, the patterns are represented by list structure. If a variable is encountered on either side of the match, it is bound, in the dictionary, to the data on the other side. + +If there are multiple occurrences of a variable in the original patterns, each subsequent occurrence must match the value bound by the first occurrence. This is ensured by the fact that every time a variable is encountered, it is looked up in the dictionary, and if there is a binding for the variable, its value is used instead of the variable. Also, every time a new binding is made and entered into the dictionary, the new binding is used to replace all instances of the newly eliminated variable in the values for other variables in the dictionary. + +To obtain the unifier of two patterns we unify them to get the dictionary of substitutions, if they can be unified. If not, unify returns #f, indicating a failure. The dictionary is then used to instantiate one of the patterns; it doesn't matter which is chosen. The procedure match:dict-substitution replaces every instance of a variable in the pattern expression pattern1 that has a binding in the dictionary dict with its value in the dictionary. + +``` +(define (unifier pattern1 pattern2) + (let ((dict (unify pattern1 pattern2))) + (and dict + ((match:dict-substitution dict) pattern1)))) +``` + +The main interface to the unifier is unify, which returns the dictionary result of a successful match, or #f if the match was unsuccessful. + +``` +(define (unify pattern1 pattern2) + (unify:internal pattern1 pattern2 + (match:new-dict) + (lambda (dict) dict))) +``` + +The unify:internal entry point gives more control of the matching process. It takes the two patterns to be unified, a dictionary that may have some bindings specified, and a success + +continuation (succeed) that will be called if the match succeeds. The success continuation provided by unify, above, just returns the dictionary. In section 4.4.4, when we add code to experiment with segment variables in the patterns, we will be able to extract multiple matches by returning #f from succeed, indicating that the result was not the one wanted. The ability to backtrack into the matcher also simplifies other interesting semantic extensions, such as incorporating algebraic expressions and equation solving into the match process. [6](#page-82-5) + +In unify:internal the patterns to be unified, pattern1 and pattern2 are wrapped in lists. The unifier program will compare these lists term by term, building a dictionary that makes corresponding terms equal. The match succeeds if both lists of terms are simultaneously exhausted. At the top level, in unify:internal, the term lists just contain the two given patterns, but the central unification procedure, unify:dispatch, will recursively descend into the pattern, comparing subpatterns of the patterns as lists of terms. [7](#page-83-0) + +``` +(define (unify:internal pattern1 pattern2 dict succeed) + ((unify:dispatch (list pattern1) (list pattern2)) + dict + (lambda (dict fail rest1 rest2) + (or (and (null? rest1) (null? rest2) + (succeed dict)) + (fail))) + (lambda () #f))) +``` + +The procedure unify:dispatch, which takes two input lists of terms, is the core of the recursive descent matcher. The match process depends on the contents of the term lists. For example, if both term lists begin with a constant, as in (ben franklin) and (ben (? fn)), the constants must be compared, and the match can proceed only if the constants are equal. If one term list begins with a variable, the other can begin with any term, and the variable must be bound to the term it matches. (If both are variables, one of the variables will be eliminated in favor of the other.) So, if one term list is ((? bmo) 6 1705) and the other is (jan (? bday) 1705), + +then the variable (? bmo) must be bound to the value jan for the match to proceed. If both term lists start with a list that is not a variable, the match must recursively match the corresponding sublists before proceeding to match the rest of the given term lists. For example, in unifying b and c in the Ben Franklin example, after the first terms are matched the dictionary contains a binding of fn to franklin and the remaining termlists are (((? bmo) 6 1705) (apr 17 (? dyear))) and ((jan (? bday) 1705) (apr 17 (? dyear))). Both of these term lists begin with a list, so the matching must recurse to compare the sublists ((? bmo) 6 1705) and (jan (? bday) 1705). + +The procedure unify-dispatcher returned by unify:dispatch takes three arguments: a dictionary, a success continuation, and a failure continuation. If both term lists are exhausted, the match succeeds. If there are more terms to be matched, the generic procedure unify:gdispatch calls an appropriate match procedure that depends on the contents of the two term lists. If the match succeeds, it means that the initial terms of the two term lists could be unified relative to the given dictionary. So the success continuation is called with the new dictionary dict\*, a new failure continuation fail\*, and the unmatched tails, rest1 and rest2, of the input lists. These tails are then matched by a recursive call to unify:dispatch. + +``` +(define (unify:dispatch terms1 terms2) + (define (unify-dispatcher dict succeed fail) + (if (and (null? terms1) (null? terms2)) + (succeed dict fail terms1 terms2) + ((unify:gdispatch terms1 terms2) + dict + (lambda (dict* fail* rest1 rest2) + ((unify:dispatch rest1 rest2) dict* succeed +fail*)) + fail))) + unify-dispatcher) +``` + +The generic procedure unify:gdispatch has handlers for the cases described above: matching two constants, matching two term lists, and matching a variable to something. (Because it is generic, it + +can be extended for new kinds of matching.) The default handler, for cases such as matching a constant to a term list, is unify:fail: + +``` +(define (unify:fail terms1 terms2) + (define (unify-fail dict succeed fail) + (fail)) + unify-fail) +(define unify:gdispatch + (simple-generic-procedure 'unify 2 unify:fail)) +``` + +In this unifier the term lists are matched term by term, so the job of a handler is to match the first terms of the two term lists. Thus the applicability of a handler depends only on the first term of each term list. To simplify the applicability specification we introduce car-satisfies, which takes a predicate and produces a new predicate ensuring that there is a first term in the list and that term satisfies the argument predicate. + +``` +(define (car-satisfies pred) + (lambda (terms) + (and (pair? terms) + (pred (car terms))))) +``` + +Any term that is not a match variable or a list is a constant. Constants match only when they are equal: + +``` +(define (unify:constant-terms terms1 terms2) + (let ((first1 (car terms1)) (rest1 (cdr terms1)) + (first2 (car terms2)) (rest2 (cdr terms2))) + (define (unify-constants dict succeed fail) + (if (eqv? first1 first2) + (succeed dict fail rest1 rest2) + (fail))) + unify-constants)) +(define (constant-term? term) + (and (not (match:var? term)) + (not (list? term)))) +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies constant-term?) + (car-satisfies constant-term?)) + unify:constant-terms) +``` + +The handler unify:list-terms is where the recursive descent actually happens. Because the first term of each term list is itself a list, the matcher must recurse to match those sublists. If the match of the sublists succeeds, the match must continue with the rest of the input termlists. (Note that the recursive match will succeed only if all of the terms of the two sublists match; so the unmatched sublist tails passed to the success continuation will be empty and are ignored.) + +``` +(define (unify:list-terms terms1 terms2) + (let ((first1 (car terms1)) (rest1 (cdr terms1)) + (first2 (car terms2)) (rest2 (cdr terms2))) + (define (unify-lists dict succeed fail) + ((unify:dispatch first1 first2) + dict + (lambda (dict* fail* null1 null2) + (succeed dict* fail* rest1 rest2)) + fail)) + unify-lists)) +(define (list-term? term) + (and (not (match:var? term)) + (list? term))) +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies list-term?) + (car-satisfies list-term?)) + unify:list-terms) +``` + +So far our code implements recursive descent and the matching of constants. Obvious contradictions like matching two different symbols or a symbol to a list produce a failure. In order to solve interesting equations we must be able to match terms with variables. When we find variables, we may add new bindings to the dictionary. The part of the equation solver that deals with variables is the procedure maybe-substitute. + +The procedure maybe-substitute gets one term list var-first that starts with a variable. It matches that variable with the first term of the second term list, terms. + +If a variable is matched against itself we have a tautology, and the match succeeds with an unchanged dictionary. If the variable + +already has a value, we replace the variable with its value and match the resulting list against the term list terms. Finally, if the variable does not have a value, we can eliminate it using do-substitute, which is responsible for adding a binding from var to term when possible. + +``` +(define (maybe-substitute var-first terms) + (define (unify-substitute dict succeed fail) + (let ((var (car var-first)) (rest1 (cdr var-first)) + (term (car terms)) (rest2 (cdr terms))) + (cond ((and (match:element-var? term) + (match:vars-equal? var term)) + (succeed dict fail rest1 rest2)) + ((match:has-binding? var dict) + ((unify:dispatch + (cons (match:get-value var dict) rest1) + terms) + dict succeed fail)) + (else + (let ((dict* (do-substitute var term dict))) + (if dict* + (succeed dict* fail rest1 rest2) + (fail))))))) + unify-substitute) +``` + +In do-substitute we first use the old dictionary to clean the incoming term by replacing any previously eliminated variables with their values. Then we check if there are any restrictions on what objects var may match. Finally we check for any occurrences of var in the cleaned term (term\*). If the cleaned term contains a reference to var, the match cannot proceed. [8](#page-83-1) If our match passes all these tests, we make a new dictionary that includes the new binding of var to the cleaned term. The binding values in the new dictionary must also be cleaned of references to var. + +``` +(define (do-substitute var term dict) + (let ((term* ((match:dict-substitution dict) term))) + (and (match:satisfies-restriction? var term*) + (or (and (match:var? term*) + (match:vars-equal? var term*)) + (not (match:occurs-in? var term*))) + (match:extend-dict var term* + (match:map-dict-values +``` + +``` +(match:single-substitution var term*) +dict))))) +``` + +Now that we know how to handle variables we just have to install this handler in our generic dispatcher procedure. The only subtlety here is that the variable to be eliminated may appear in either term list. We must guarantee that the term list containing the variable is the first argument to maybe-substitute. + +``` +(define (element? term) + (any-object? term)) +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies match:element-var?) + (car-satisfies element?)) + (lambda (var-first terms) + (maybe-substitute var-first terms))) +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies element?) + (car-satisfies match:element-var?)) + (lambda (terms var-first) + (maybe-substitute var-first terms))) +``` + +At this point we have a complete, correct, and competent traditional unifier. [9](#page-83-2) It is written with generic procedures, so it can easily be extended to work with other kinds of data. And with only a small amount of work we can add semantic attachments, such as the commutativity of lists beginning with the symbols + and \*. As we shall see, we can also add support for new kinds of syntactic variables, such as segment variables. But before we do that we will look at a real application: type inference. + +## **Exercise 4.10: Unifying vectors** + +This unifier can be extended to handle data and patterns that are made of other data types, such as vectors. Make handlers for vectors without transforming the vectors to lists (the easy way out!). + +### **Exercise 4.11: Unifying strings** + +Extend the unifier to allow unification of strings. This could be fun, but you need to invent a syntactic mechanism for representing string variables inside a string. This is pretty delicate, because you may have to represent a string variable with a string expression. This gets into quotation problems—please try not to invent a baroque mechanism. Also, make sure that you don't make assumptions that will prevent you from introducing string segment variables later. (See exercise 4.21 on page 209.) + +## **Exercise 4.12: Variable restrictions** + +We added support for restrictions on variables as we did in the onesided matcher: we just put a clause for that into the main conditional in the procedure do-substitute. But there are subtle problems. + +- What should happen if a restricted variable is matched against another restricted variable? +- When the variable is first bound to its target, after passing the restriction, it is uniformly eliminated. But the restriction is then lost, preventing it from killing an unsuitable later part of the match. + +Your task is to understand these problems and determine how to ameliorate them. How important could this be for any applications you might consider? Is there a solution that fits nicely into our implementation strategy? + +## **Exercise 4.13: Unifying with pattern combinators?** + +Unlike our earlier one-sided pattern matcher, our unification matcher does not compile the patterns into match procedures that combine to build a match procedure for the pattern. But a system of match procedures is potentially more efficient, because it avoids the syntactic analysis of the patterns while matching. Can the unification matcher be broken up in a similar way? If not, why not? Is it a good idea to do so? If not, why not? If so, do it! (This is hard!) + +#### **4.4.2 Application: Type inference** + +One classic application of unification matching is type inference: given a program and some type information about parts of the program, deduce type information about other parts of the program. For example, if we know that < is a procedure that takes two numerical arguments and produces a boolean value, then if we analyze the expression (g (< x (f y))), we can deduce that f and g are unary procedures; g accepts a boolean argument; f returns a numerical value; and x has a numerical value. If this information is used to deduce properties of the program that the expression is embedded in, we can learn a great deal about the program. Here is an analysis of the expression: + +``` +(pp (infer-program-types '(g (< x (f y))))) +(t (? type:17) + ((t (type:procedure ((boolean-type)) (? type:17)) g) + (t (boolean-type) + ((t (type:procedure ((numeric-type) (numeric-type)) + (boolean-type)) + <) + (t (numeric-type) x) + (t (numeric-type) + ((t (type:procedure ((? y:12)) (numeric-type)) f) + (t (? y:12) y))))))) +``` + +This is the abstract tree of the given expression, annotated with types. Each subexpression *x* has been expanded into a *typed expression* of the form (t *type x*). For example, the reference to g has the type: + +``` +(type:procedure ((boolean-type)) (? type:17)) +``` + +As expected, g is a procedure that accepts a boolean argument, but we have no information about its value. The unknown value type is represented by the pattern variable (? type:17). + +Let's consider a more substantial example: + +``` +(define foo + (infer-program-types + '(define fact + (lambda (n) + (begin + (define iter + (lambda (product counter) + (if (> counter n) + product + (iter (* product counter) + (+ counter 1))))) + (iter 1 1)))))) +``` + +The result in foo is rather verbose. So we look at it with a simplifier that puts it into "human readable" form. + +``` +(pp (simplify-annotated-program foo)) +(begin + (define fact + (lambda (n) + (declare-type n (numeric-type)) + (define iter + (lambda (product counter) + (declare-type product (numeric-type)) + (declare-type counter (numeric-type)) + (if (> counter n) + product + (iter (* product counter) + (+ counter 1))))) + (declare-type iter + (type:procedure ((numeric-type) (numeric-type)) + (numeric-type))) + (iter 1 1))) + (declare-type fact + (type:procedure ((numeric-type)) (numeric-type)))) +``` + +Here we see that the type inference program was able to determine the complete type of the factorial program—that it is a procedure that takes one numerical input and produces a numerical output. This is reported in a declaration: + +``` +(declare-type fact + (type:procedure ((numeric-type)) (numeric-type))) +``` + +The type of the internal definition iter has also been determined: it takes two numerical arguments and produces a numerical result. + +``` +(declare-type iter + (type:procedure ((numeric-type) (numeric-type)) + (numeric-type))) +``` + +Also, the type of each internal variable has been determined, and an appropriate declaration has been posted: + +``` +(declare-type n (numeric-type)) +(declare-type product (numeric-type)) +(declare-type counter (numeric-type)) +``` + +#### **4.4.3 How type inference works** + +The process of type inference has four phases. + +- 1. The given program is annotated with type variables for all subexpressions of the program. +- 2. Constraints on the type variables are formulated based on the semantic structure of the program. +- 3. The constraints are unified to eliminate as many of the variables as possible. +- 4. The annotated program is specialized using the dictionary produced by unification of the constraints to make a new annotated program whose type annotations incorporate the constraints. + +The plan is implemented in this procedure: + +``` +(define (infer-program-types expr) + (let ((texpr (annotate-program expr))) + (let ((constraints (program-constraints texpr))) + (let ((dict (unify-constraints constraints))) + (if dict + ((match:dict-substitution dict) texpr) + '***type-error***))))) +``` + +This procedure complains if the program expression cannot be consistently typed. However, it gives no explanation about why it failed; this could be accomplished by passing information back in the failure continuations. + +#### **Annotation** + +The annotate-program procedure is implemented in terms of a generic procedure, annotate-expr, to allow easy extension for new language features. + +``` +(define (annotate-program expr) + (annotate-expr expr (top-level-env))) +(define annotate-expr + (simple-generic-procedure 'annotate-expr 2 #f)) +``` + +The annotate-expr procedure takes an environment for bindings of the type variables. It is initialized with the top-level environment created below. + +There are simple handlers for annotating simple kinds of expressions. If an explicit number appears as a subexpression it is given a constant type, constructed by (numeric-type): + +``` +(define-generic-procedure-handler annotate-expr + (match-args number? any-object?) + (lambda (expr env) + (make-texpr (numeric-type) expr))) +``` + +The procedure make-texpr constructs a typed expression from a type and an expression. Its parts can be selected with texpr-type and texpr-expr. + +However, we may not a priori know a type for an identifier, which is represented by a symbol. The procedure get-var-type tries to find the identifier's type in the environment, and failing that, creates a unique type variable for the type annotation of all occurrences of the identifier in that lexical context: + +``` +(define-generic-procedure-handler annotate-expr + (match-args symbol? any-object?) +``` + +``` +(lambda (expr env) + (make-texpr (get-var-type expr env) expr))) +``` + +We may know types for some identifiers, such as primitive procedures of the language. These are provided in the top-level environment. The primitive procedures shown here have procedure types with type constants (e.g., (numeric-type)) for their arguments and values: + +``` +(define (top-level-env) + (list (make-top-level-env-frame))) +(define (make-top-level-env-frame) + (let ((binary-numerical + (let ((v (numeric-type))) + (procedure-type (list v v) v))) + (binary-comparator + (let ((v (numeric-type))) + (procedure-type (list v v) (boolean-type))))) + (list (cons '+ binary-numerical) + ... + (cons '= binary-comparator) + (cons '< binary-comparator) + ...))) +``` + +For a conditional expression, a type variable is created for the value of the conditional expression, and each subexpression is recursively annotated: + +``` +(define-generic-procedure-handler annotate-expr + (match-args if-expr? any-object?) + (lambda (expr env) + (make-texpr (type-variable) + (make-if-expr + (annotate-expr (if-predicate expr) env) + (annotate-expr (if-consequent expr) env) + (annotate-expr (if-alternative expr) env))))) +``` + +There are annotation handlers for every kind of expression. We will not show all of them, but the annotation of a lambda expression is interesting: + +``` +(define-generic-procedure-handler annotate-expr + (match-args lambda-expr? any-object?) + (lambda (expr env) +``` + +``` +(let ((env* (new-frame (lambda-bvl expr) env))) + (make-texpr + (procedure-type (map (lambda (name) + (get-var-type name env*)) + (lambda-bvl expr)) + (type-variable)) + (make-lambda-expr (lambda-bvl expr) + (annotate-expr) (lambda-body expr) + env*)))))) +``` + +Just as in an interpreter or compiler, the annotation of a lambda expression makes a new environment frame to hold information about the bound variables; in this case we create one type variable for each bound variable. We create a procedure type for the value of the lambda expression, with the type variables we just created for the bound variables and a type variable for the value, and we recursively annotate the body. + +#### **Constraints** + +The program-constraints procedure formulates constraints on the type variables based on the semantic structure of the program. It is also implemented using a generic procedure with handlers for each expression type. + +``` +(define (program-constraints texpr) + (program-constraints-1 (texpr-type texpr) + (texpr-expr texpr))) +(define program-constraints-1 + (simple-generic-procedure 'program-constraints-1 2 #f)) +``` + +This generic procedure takes two arguments: the type of an expression and the expression itself. It returns a list of constraints on the types that it discovers in its study of the expression. It walks the expression tree, discovering and formulating type constraints where they may be found. + +Here is the handler for conditionals: + +``` +(define-generic-procedure-handler program-constraints-1 + (match-args type-expression? if-expr?) +``` + +``` +(lambda (type expr) + (append + (list (constrain (boolean-type) + (texpr-type (if-predicate expr))) + (constrain type + (texpr-type (if-consequent expr))) + (constrain type + (texpr-type (if-alternative expr)))) + (program-constraints (if-predicate expr)) + (program-constraints (if-consequent expr)) + (program-constraints (if-alternative expr))))) +``` + +This handler formulates three type constraints that it adds to the constraints it recursively formulates in the three subexpressions of the conditional. The first constraint is that the value of the predicate expression is a boolean. The second and third constraints are that the type of the value of the conditional is the same as the types of the value of the consequent expression and the value of the alternative expression. + +The constraints are represented as equations: + +``` +(define (constrain lhs rhs) + '(= ,lhs ,rhs)) +``` + +(The identifiers lhs and rhs are mnemonic for "left-hand side" and "right-hand side" respectively.) + +The type constraint for a lambda expression is that the type of the value returned by the lambda expression's procedure is the same as the type of the value of its body. This is combined with the constraints formulated for the body. + +``` +(define-generic-procedure-handler program-constraints-1 + (match-args type-expression? lambda-expr?) + (lambda (type expr) + (cons (constrain (procedure-type-codomain type) + (texpr-type (lambda-body expr))) + (program-constraints (lambda-body expr))))) +``` + +The constraints for a procedure call are that the operator's type is a procedure type, the types of the operand expressions match the argument types of the procedure, and the type of the value returned by the procedure is the type of the call. + +``` +(define-generic-procedure-handler program-constraints-1 + (match-args type-expression? combination-expr?) + (lambda (type expr) + (cons (constrain (texpr-type (combination-operator expr)) + (procedure-type + (map texpr-type + (combination-operands expr)) + type)) + (append + (program-constraints (combination-operator expr)) + (append-map program-constraints + (combination-operands expr)))))) +``` + +#### **Unification** + +Each constraint discovered is an equation of two type expressions. So we now have a set of equations to solve. This is accomplished by unifying the left-hand side (lhs) and right-hand side (rhs) of each equation. All these unifications must be done in the same variablebinding context so as to solve them simultaneously. Since unification of two lists unifies corresponding elements of the lists, we can just combine the constraints into one giant unification: + +``` +(define (unify-constraints constraints) + (unify (map constraint-lhs constraints) + (map constraint-rhs constraints))) +``` + +The dictionary returned by unify-constraints is then used by infer-program-types (on page 196) to instantiate the typed program. + +#### **Critique** + +Although this small type-inference system is a nice demonstration of unification, it is not very good at type inference: it doesn't really handle procedures very well. For example, consider the simple case: + +``` +(pp (infer-program-types + '(begin (define id (lambda (x) x)) + (id 2)))) +``` + +This apparently works correctly, returning + +``` +(t (numeric-type) + (begin + (t (type:procedure ((numeric-type)) (numeric-type)) + (define id + (t (type:procedure ((numeric-type)) (numeric-type)) + (lambda (x) (t (numeric-type) x))))) + (t (numeric-type) + ((t (type:procedure ((numeric-type)) (numeric-type)) + id) + (t (numeric-type) 2))))) +``` + +But notice that the identity procedure has been typed as having a numeric argument and a numeric value, because the procedure was used with a numeric argument. However, the correct type for the identity procedure should not require any specific kind of argument. More generally, the type of a procedure should not depend on its use in an example. This confusion causes a failure to type a perfectly reasonable piece of code: + +``` +(infer-program-types + '(begin (define id (lambda (x) x)) + (id 2) + (id #t))) +***type-error*** +``` + +## **Exercise 4.14: Procedures** + +The specific problem shown in the critique above is not very hard to fix, but the general case is complicated. How can we handle procedures passed as arguments and returned as values? Remember that there may be free variables in a procedure that are lexically bound where the procedure was defined. + +Work out a fix for this problem, and make it as general as you can. + +## **Exercise 4.15: Parametric types** + +This exercise examines what it takes to extend this type-inference system to work with parametric types. For example, the Scheme map procedure operates on lists of objects of any type. + +- **a.** What must be done to extend the system to support parametric types? Does this extension require us to modify the unifier? If so, explain why it is necessary. If not, explain why it is not necessary. +- **b.** Implement the changes required to allow parametric types to be used. + +## **Exercise 4.16: Union types** + +The type-inference system we have outlined here does not have any support for union types. For example, the addition operator + is defined for numeric arithmetic. But what if we want + to be both addition of numbers and concatenation of strings? + +- **a.** What must be done to extend the system to support union types? Does this extension require us to modify the unifier? If so, explain why it is necessary. If not, explain why it is not necessary. +- **b.** Implement the changes required to allow union types to be used. Note: This is not easy. + +## **Exercise 4.17: Side effects** + +The type-inference system we have outlined here is adequate for pure functional programs. Can it be elegantly extended to work for programs with assignment? If you think so, explain and demonstrate your design. If you think not, explain your reasons. + +This is not easy. It may be a nice term project to understand this and make it work. + +### **Exercise 4.18: Is this practical?** + +Is our implementation of type inference practical? + +- **a.** Estimate the orders of growth of time and space of the annotation and constraints phases with the size of the program being analyzed. +- **b.** Estimate the order of growth of time and space of the giant unification phase, using the algorithm shown. What about the best known algorithms for unification? (This will take some library research.) +- **c.** Is there a way to break up the giant unification phase into parts so that the whole has better asymptotic behavior? + +#### **4.4.4 Adding segment variables—an experiment!** + +Adding segment variables to the unifier is exciting: we are not sure exactly what we will get. [10](#page-83-3) But our careful use of generic procedures will ensure that no program that depends on the behavior of the unifier without the addition of segment variables (such as the type inference example) will produce wrong answers as a consequence of this experiment. Indeed, the organization of the unifier in terms of generic procedures makes such experiments relatively unproblematic. [11](#page-84-0) + +The use of predicates for the dispatch controls the interaction between element variables and segment variables. For example, a segment variable may incorporate an element variable into a segment it accumulates, but an element variable may not have a segment variable as its value. Thus, we must change our definition of the predicate element? (on page 192) to exclude segment variables: + +``` +(define (element? term) + (not (match:segment-var? term))) +``` + +We need generic handlers for the segment variable cases. The unify:gdispatch handler for term lists that start with a segment variable is maybe-grab-segment, which is installed as follows. The list known to contain the segment variable is always passed as the first argument to maybe-grab-segment (as we did with maybesubstitute). [12](#page-84-1) + +``` +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies match:segment-var?) + (complement (car-satisfies match:segment- +var?))) + (lambda (var-first terms) + (maybe-grab-segment var-first terms))) +(define-generic-procedure-handler unify:gdispatch + (match-args (complement (car-satisfies match:segment-var?)) + (car-satisfies match:segment-var?)) + (lambda (terms var-first) + (maybe-grab-segment var-first terms))) +``` + +In matching two termlists that each start with a segment variable, there is a special case to be handled: if both lists start with the same segment variable, we can dismiss the tautology without further work. Otherwise it is possible that we will get a match starting with either variable. But there are cases where a good match is obtained with one variable but not the other, depending on the further occurrences of the variables in the patterns. To make sure we don't miss a match starting with one of the variables, we make the match symmetrical by trying the other order if the first one fails. + +``` +(define (unify:segment-var-var var-first1 var-first2) + (define (unify-seg-var-var dict succeed fail) + (if (match:vars-equal? (car var-first1) (car var-first2)) + (succeed dict fail (cdr var-first1) (cdr var-first2)) + ((maybe-grab-segment var-first1 var-first2) + dict + succeed + (lambda () + ((maybe-grab-segment var-first2 var-first1) + dict + succeed +``` + +``` +fail))))) + unify-seg-var-var) +(define-generic-procedure-handler unify:gdispatch + (match-args (car-satisfies match:segment-var?) + (car-satisfies match:segment-var?)) + unify:segment-var-var) +``` + +The procedure maybe-grab-segment is analogous to the procedure maybe-substitute (on page 191) used for element variables. The case of matching a segment variable against itself was handled by unify:segment-var-var; so maybe-grab-segment starts by checking if the segment variable at the start of var-first has a value. If so, we replace the variable with its value and match the resulting list against the term list terms. Because the binding of a segment variable is the list of elements that it gobbles, we use append to replace the segment variable with its value. The more complex job of matching an unbound segment variable is passed on to grab-segment. + +``` +(define (maybe-grab-segment var-first terms) + (define (maybe-grab dict succeed fail) + (let ((var (car var-first))) + (if (match:has-binding? var dict) + ((unify:dispatch + (append (match:get-value var dict) + (cdr var-first)) + terms) + dict succeed fail) + ((grab-segment var-first terms) + dict succeed fail)))) + maybe-grab) +``` + +The procedure grab-segment is where the segment matching and backtracking actually happen. The term list is broken into two parts: an initial segment and the rest of the terms (terms\*). The initial segment (initial) starts out empty and terms\* is the whole term list. The match tries to proceed with the segment variable bound to initial. If that fails, the failure continuation tries to match with an element moved from terms\* to initial. This is + +repeated until either a match succeeds or the match of the entire term list fails: + +``` +(define (grab-segment var-first terms) + (define (grab dict succeed fail) + (let ((var (car var-first))) + (let slp ((initial '()) (terms* terms)) + (define (continue) + (if (null? terms*) + (fail) + (slp (append initial (list (car terms*))) + (cdr terms*)))) + (let ((dict* (do-substitute var initial dict))) + (if dict* + (succeed dict* continue (cdr var-first) +terms*) + (continue)))))) + grab) +``` + +This appears to be all that is required to make a unifier with an experimental extension for segment variables. With segment variables we must expect to get multiple matches. We can reject a match, forcing the program to backtrack, to get an alternative. Note that each dictionary entry is a list containing the name of the variable, the value, and the type of the variable. + +We can use the unifier as a one-sided matcher. For example, there are exactly two ways to match the distributive law pattern to the given algebraic expression, as we see: [13](#page-84-2) + +``` +(let ((pattern '(* (?? a) (+ (?? b)) (?? c))) + (expression '(* x y (+ z w) m (+ n o) p))) + (unify:internal pattern expression (match:new-dict) + (lambda (dict) + (pp (match:bindings dict)) + #f))) +((c (m (+ n o) p) ??) (b (z w) ??) (a (x y) ??)) +((c (p) ??) (b (n o) ??) (a (x y (+ z w) m) ??)) +#f +``` + +Both of these dictionaries produce the same substitution instance: + +``` +(* x y (+ z w) m (+ n o) p) +``` + +But in an algebraic manipulator we really want both dictionaries, because each of them represents a different application of the distributive law. + +Things get more complicated and much less clear when segment variables match against lists containing segment variables: + +``` +(let ((p1 '(a (?? x) (?? y) (?? x) c)) + (p2 '(a b b b (?? w) b b b c))) + (unify:internal p1 p2 (match:new-dict) + (lambda (dict) + (pp (match:bindings dict)) + #f))) +((y (b b b (?? w) b b b) ??) (x () ??)) +((y (b b (?? w) b b) ??) (x (b) ??)) +((y (b (?? w) b) ??) (x (b b) ??)) +((w () ??) (y () ??) (x (b b b) ??)) +((w () ??) (y () ??) (x (b b b) ??)) +((y ((?? w)) ??) (x (b b b) ??)) +((y () ??) (w () ??) (x (b b b) ??)) +((w ((?? y)) ??) (x (b b b) ??)) +((w () ??) (y () ??) (x (b b b) ??)) +#f +``` + +Apparently, there are many ways to make this match. But many of the dictionaries are really different ways of constructing the same substitution instance. To see this clearly, we construct the substitution instance in each case: + +``` +(let ((p1 '(a (?? x) (?? y) (?? x) c)) + (p2 '(a b b b (?? w) b b b c))) + (unify:internal p1 p2 (match:new-dict) + (lambda (dict) + (and dict + (let ((subst (match:dict-substitution dict))) + (let ((p1* (subst p1)) (p2* (subst p2))) + (if (not (equal? p1* p2*)) + (error "Bad dictionary")) + (pp p1*)))) + #f))) +(a b b b (?? w) b b b c) +(a b b b (?? w) b b b c) +(a b b b (?? w) b b b c) (a b b b b b b c) +(a b b b b b b c) +``` + +``` +(a b b b (?? w) b b b c) (a b b b b b b c) +(a b b b (?? y) b b b c) (a b b b b b b c) +#f +``` + +So we see that each "solution" is a valid solution to the problem of finding values for the variables that when substituted back into the given patterns make the patterns the same. In this case five of the solutions are equivalent. These five are the most general unifiers, and they are unique up to renaming of the variables. The other four are not as general as possible. But unification is supposed to produce the unique most general common substitution instance of the two input patterns, up to renaming of variables. So with segments, this very useful pattern matcher is not really a unifier. + +Actually, the problem is a bit worse. There are perfectly good matches that are not found by this program. Here is an example: + +``` +;;; A missing match! +(unify:internal '(((?? x) 3) ((?? x))) + '((4 (?? y)) (4 5)) + (match:new-dict) + (lambda (dict) + (pp (match:bindings dict)) + #f)) +#f +``` + +But these expressions do match, with the following bindings: + +``` +((x (4 5) ??) (y (5 3) ??)) +``` + +How sad! But there is a moral to this story. Using generic procedures, we can make possibly problematic extensions to a correct algorithm without undermining its correctness for uses of the unextended algorithm. The extensions may be useful for some purposes, even without satisfying the correctness requirements of the unextended algorithm. + +### **Exercise 4.19: Can we fix these problems?** + +We have a problem with unifying patterns containing segment variables. We may miss some matches; we may generate multiple copies of the same solution; and some of the solutions, although valid solutions of the problem to make the input patterns equal, are not maximally general. Let's think about fixing this. + +- **a.** Write a wrapper for unify:internal that collects all of the solutions. This is not hard if you use assignments, but it might be more fun to look for a functional solution—but don't try too hard! +- **b.** Now that you have all of the solutions, it is easy to eliminate duplicates. Create the result of substituting from each solution into the inputs. You can check that the results of the two substitutions are equal—this is a check that the algorithm for solving is correct. Now save the pair of one substitution and one result for each distinct result. Be careful: The name of a variable doesn't matter, so two resulting dictionaries represent the same solution if you can get one by uniformly renaming variables in the other. +- **c.** If any result in the collection is a substitution instance of another result, it is not a most general common specialization of the two inputs. + +Write the predicate substitution-instance? to filter those out. You are now left with the collection of the most general common specializations that this algorithm will generate. Return these. + +**d.** Figure out a way to avoid missing matches like the "A missing match!" shown above. Is there a simple extension of the code shown that can handle this kind of match? Note: This is an extremely difficult problem. + +### **Exercise 4.20: More general matches** + +Beyond the nasty problems shown above, there is an interesting subtlety that is not addressed by the unifier. Consider the following problem: + +``` +(unifier '((?? x) 3) '(4 (?? y))) +(4 3) +``` + +Here we see a perfectly good match, but it is not the most general one possible. The problem is that there can be any number of things between the 4 and the 3. A better answer would be: + +``` +(4 (?? z) 3) +``` + +Figure out how to get this answer. This requires a significant extension to the unifier. + +## **Exercise 4.21: Strings with segments** + +If you did not do exercise 4.11 (page 193), do it now. But here we want you to add string segment variables. This can be useful in matching segments of DNA! + +## **4.5 Pattern matching on graphs** + +The pattern matching we have developed so far is for matching list structures. Such structures are excellent for representing expressions, such as algebraic expressions or the abstract syntax trees of computer-language expressions. However, pattern matching can be used to make systems that operate on a much wider range of data. If the structure of interest can be characterized by an accessibility relation, it may be appropriate to describe the structure as a graph of *nodes* representing "places" and *edges* representing "path elements" describing how the places are interconnected. An electrical circuit is an example of such a structure, where the circuit parts and circuit nodes are places and the accessibility relation is + +just the description of the interconnect. A board game like chess or checkers is another, where the board squares may be represented by nodes in a graph and the adjacency of squares may be represented by edges in the graph. + +We will implement a graph as a collection of nodes and edges. Our graphs are immutable in the sense that once a node or an edge is added, it cannot be modified; the graph can be changed only by adding more nodes and edges. This will have consequences that we will see in section 4.5.4. + +A node contains a collection of edges, and an edge is a combination of a *label* and a *value*. The label of an edge is an object that is unique under eqv?, usually a symbol or a number. The value of an edge is a Scheme object, often another node. + +This implementation will work with concrete graphs (where all of the nodes and edges are available at the time we build the graph) and lazy graphs (where the graph is extended, as necessary, at the time of access). In the simpler world of linear sequences, a list is a concrete graph and a stream is a lazy graph that is generated when referenced. + +We will first look at a simple example to see how graphs work. We will then use an extended example, a chess referee, to explore more complex uses of graphs and pattern matching on graphs. + +#### **4.5.1 Lists as graphs** + +We start with the simple but familiar world of lists. The cons cells are the nodes, which will be made with g:cons and whose car and cdr will be implemented as edges labeled with car and cdr and accessed by g:car and g:cdr: + +``` +(define (g:cons car cdr) + (let ((pair (make-graph-node 'pair))) + (pair 'connect! 'car car) + (pair 'connect! 'cdr cdr) + pair)) +(define (g:car pair) (pair 'edge-value 'car)) +(define (g:cdr pair) (pair 'edge-value 'cdr)) +``` + +To represent lists as graphs we need a special end marker for lists: + +``` +(define nil (make-graph-node 'nil)) +(define (g:null) nil) +(define (g:null? object) (eqv? object nil)) +``` + +The conversion of a list to a list graph is: + +``` +(define (list->graph list) + (if (pair? list) + (g:cons (car list) (list->graph (cdr list))) + (g:null))) +``` + +and a simple example works as expected: + +``` +(define g (list->graph '(a b c))) +(and (eqv? 'a (g:car g)) + (eqv? 'b (g:car (g:cdr g))) + (eqv? 'c (g:car (g:cdr (g:cdr g)))) + (g:null? (g:cdr (g:cdr (g:cdr g))))) +#t +``` + +We can modify the list-graph constructor to allow lazy graphs, with nodes that are created as edges are traversed: + +``` +(define (list->lazy-graph list) + (if (pair? list) + (g:cons (delay (car list)) + (delay (list->lazy-graph (cdr list)))) + (g:null))) +``` + +Here we used the Scheme [109] delay to construct a *promise* that will evaluate the delayed (postponed) expression when the promise is forced. Streams [13] (lazy lists) are usually constructed using delay and force. + +#### **4.5.2 Implementing graphs** + +We have to be able to make *graph nodes* and connect them to other nodes by *edges*. We will represent a graph node as a *bundle* + +*procedure*: a collection of delegate procedures that can be called by name. [14](#page-84-3) + +``` +(define (make-graph-node name) + (let ((edges '())) + (define (get-name) name) + (define (all-edges) (list-copy edges)) + (define (%find-edge label) + (find (lambda (edge) + (eqv? label (edge 'get-label))) + edges)) + (define (has-edge? label) + (and (%find-edge label) #t)) ; boolean value + (define (get-edge label) + (let ((edge (%find-edge label))) + (if (not edge) + (error "No edge with this label:" label)) + edge)) + (define (edge-value label) + ((get-edge label) 'get-value)) + (define (connect! label value) + (if (has-edge? label) + (error "Two edges with same label:" label)) + (set! edges + (cons (make-graph-edge label value) edges))) + (define (maybe-connect! label value) + (if (not (default-object? value)) + (connect! label value))) + (bundle graph-node? get-name all-edges has-edge? + get-edge edge-value connect! maybe-connect!))) +``` + +The argument to make-graph-node is the name of the new node; this is shown when printing a node object. The first argument to the bundle macro is a predicate that the generated bundle will satisfy. In this case, it is defined as + +``` +(define graph-node? (make-bundle-predicate 'graph-node)) +``` + +We will not show the definitions of other bundle predicates since they are similar. + +Edges are also represented as bundle procedures. An edge may have a concrete value or the value may be a promise (constructed by delay) to produce the value when asked. The latter provides for lazy graph structures. + +``` +(define (make-graph-edge label value) + (define (get-label) label) + (define (get-value) + (if (promise? value) + (force value) + value)) + (bundle graph-edge? get-label get-value)) +``` + +## **Exercise 4.22: More lazy graphs** + +We have shown how to make concrete lists and lazy lists. How about some more interesting structures? + +Perhaps it would be nice to have a dynamically extensible tree. For example, a game tree could be usefully built this way: we may want to elaborate the tree both in breadth and depth as resources become available. Make an example of such a tree that can be extended as more plausible moves are considered at each level, and as more levels are added for consideration. + +#### **4.5.3 Matching on graphs** + +We might want to search a graph for interesting features. One way to do this is to try to match patterns to the graph. A pattern for a graph could specify an alternating sequence of nodes and edges: a *path*. Such a pattern can be matched by starting at a node and trying to follow the path specified by the pattern. + +Imagine, for example, that we have a chessboard and chess pieces. The board squares are nodes of a graph. The nodes representing adjacent squares are connected to a given node by edges. We can label the edges, as seen by the player playing White, by compass directions: north, south, east, west, northeast, southeast, northwest, southwest. Going north is toward the Black side of the board, and going south is toward the White side of the board. + +Given such an arrangement, we can specify a move where a knight may move north-north-east as: + +``` +(define basic-knight-move + '((? source-node ,(occupied-by 'knight)) + north (?) + north (?) + east (? target-node ,maybe-opponent))) +``` + +This pattern shares several characteristics with those we've looked at in previous sections: element variables are introduced by the ? character; they can have names (e.g., source-node); and they can have restrictions (e.g., (occupied-by 'knight)). We introduce the syntax (?) to indicate an anonymous element variable. + +The pattern match starts with source-node, traverses two edges labeled north—with nodes that we don't care about—and finally travels east to reach target-node. We call this kind of pattern a *path pattern*, or in the context of chess, a *move pattern*. + +Of course, this is only one possible knight move. But we can generate all possible knight moves by symmetries: we can reflect the knight move east-west, we can rotate it clockwise by 90 degrees, and we can rotate it by 180 degrees: + +``` +(define all-knight-moves + (symmetrize-move basic-knight-move + reflect-ew rotate-90 rotate-180)) +``` + +The symmetrize-move procedure applies all possible combinations of these three symmetries to produce eight moves. The order in which the symmetry transformations are applied doesn't matter for the transformations we use. + +``` +(define (symmetrize-move move . transformations) + (let loop ((xforms transformations) (moves (list move))) + (if (null? xforms) + moves + (loop (cdr xforms) + (append moves + (map (rewrite-path-edges (car xforms)) + moves)))))) +``` + +where rewrite-path-edges applies its argument to each edge label in a move, producing a new move with substituted edge labels. + +One example of such a symmetry transformation is + +``` +(define (reflect-ew label) + (case label + ((east) 'west) + ((northeast) 'northwest) + ((northwest) 'northeast) + ((southeast) 'southwest) + ((southwest) 'southeast) + ((west) 'east) + (else label))) +``` + +and the others are similar remappings of the compass directions. The resulting list of all knight moves is + +``` +((source north (?) north (?) east target ) (source north (?) +north (?) west target) + (source east (?) east (?) south target) + (source east (?) east (?) north target) + (source south (?) south (?) west target) + (source south (?) south (?) east target) + (source west (?) west (?) north target) + (source west (?) west (?) south target)) +``` + +where we have simplified the printing by replacing the restricted source and target node variables with *source* and *target*. + +Knight moves are special in chess, in that a knight can move over squares occupied by either a friend or an opponent to get to the target square. Rooks, bishops, and queens may not pass through an occupied square, but they may pass through many unoccupied squares on their way to a target square. We need a way to specify such a repeated traversal. We use (\* ...) to specify a repeated traversal: + +``` +(define basic-queen-move + '((? source-node ,(occupied-by 'queen)) + (* north (?* ,unoccupied)) + north (? target-node ,maybe-opponent))) +``` + +The queen may move north through any number of unoccupied squares to the target square. The notation (?\* ...) is a new kind of pattern variable that can be used only inside a (\* ...) pattern. Like a simple pattern variable, it matches one element, but instead + +of saving just a single matched value, it collects a list of all elements matched in the repeat. All of the queen's possible moves are then: + +``` +(define all-queen-moves + (symmetrize-move basic-queen-move + rotate-45 rotate-90 rotate-180)) +``` + +Pawns have more complicated rules. A pawn is (almost) the only piece whose possible moves depend on its position or the position of a neighboring opponent. [15](#page-84-4) A pawn may go north one or two steps from its initial position, but it may go only one step north if not in its initial position. A pawn may take one step northeast or northwest if and only if that move takes an opponent piece. Finally, a pawn in the penultimate row may move into the last row and be promoted into any piece, usually a queen. [16](#page-84-5) + +## **Exercise 4.23: Filling out chess moves** + +We have shown how to make patterns for knight moves and queen moves, but we have not made patterns for moves for all chess pieces. + +- **a.** Rook moves and bishop moves are similar to queen moves, but more restricted: a rook cannot move diagonally, and a bishop can move *only* diagonally. Make patterns for all bishop moves and all simple rook moves. +- **b.** Pawn moves are much more complicated. Make a set of patterns for all possible pawn moves (except en passant captures). +- **c.** Make a set of patterns for the king's very limited ways to move. Don't worry about castling or the rule that a king cannot be moved into check. +- **d.** Castling is the final special case. It involves both the king and a rook. Make a set of castling patterns. (See footnote 15.) + +### **4.5.4 Chessboards and alternate graph views** + +The chessboard, as a graph, incorporates an exciting idea. We want the same patterns to work for both players. But the edges describing directions are different: north for White is south for Black and east for White is west for Black! This makes little difference for the major pieces (the rooks, knights, bishops, kings, queens) with symmetrical move patterns, but White pawns can move only north and Black pawns can move only south. In any case, it would be pleasant to make the move descriptions the same for both players. + +We want the two players to have different views of the board graph: we want the meanings of the edge labels to be relative to the player. If the player playing White sees a north edge from (the node representing) square A to square B we want the player playing Black to see a north edge from square B to square A. + +To make this work we introduce *graph views*. A graph view is a reversible mapping from one edge label to another. When a graph view is applied to a node, it returns a copy of that node in which the edges are renamed. + +In the case of chess the relevant view is with the board rotated 180 degrees: + +``` +(define rotate-180-view + (make-graph-view 'inverse rotate-180 rotate-180)) +``` + +where make-graph-view makes a graph view. The procedure graph-node-view applies a view to a node: + +``` +(graph-node-view node view ) +``` + +White will see a node directly and Black will see the same node projected through the rotate-180-view. Given this map, all operations look the same to both White and Black. + +Using a graph view takes care of *relative* addressing, where we are looking at neighbors of a given node. But we also need to do *absolute* addressing, where the node to find is specified by a row and column. Each color wants to see similar addressing, where the home row is 0, and the opponent's home row is 7; likewise each + +color sees the leftmost column as 0 and the rightmost as 7. [17](#page-84-6) White's addresses are the default, and Black's are inverted with the procedure invert-address. + +Let's make a board. The following code is specific to chess, since we're not focusing on making an abstract domain. We make an 8 × 8 array of nodes representing squares, each with an address. We iterate through all possible square addresses, connecting each node to each of its neighbors by an edge with the appropriate label. Then we populate the sides with pieces. + +``` +(define chess-board-size 8) +(define chess-board-indices (iota chess-board-size)) +(define chess-board-last-index (last chess-board-indices)) +(define (make-chess-board) + (let ((board (make-chess-board-internal))) + (for-each (lambda (address) + (connect-up-square address board)) + board-addresses) + (populate-sides board) + board)) +``` + +The possible addresses for chess-board squares are all pairs of integers from 0 to 7: + +``` +(define board-addresses + (append-map (lambda (y) + (map (lambda (x) + (make-address x y)) + chess-board-indices)) + chess-board-indices)) +``` + +The procedure make-chess-board-internal makes the array of nodes for squares as a list of rows, each of which is a list of columns for that row. It returns a bundle procedure with a handful of delegates to manipulate the board. + +``` +(define (make-chess-board-internal) + (let ((nodes + (map (lambda (x) + (map (lambda (y) + (make-graph-node (string x "," y))) + chess-board-indices)) +``` + +``` +chess-board-indices))) +(let loop ((turn 0)) + See below for the delegate definitions. + (bundle #f node-at piece-at piece-in address-of + set-piece-at color next-turn)))) +``` + +The turn variable is the current turn, starting with zero. Even turns are White, and odd turns are Black, as shown by the delegate procedure color: + +``` +(define (color) (if (white-move?) 'white 'black)) +(define (white-move?) (even? turn)) +``` + +The delegate procedure node-at gets the node at a given address. If this is a Black turn, it translates the address and applies the node view. + +``` +(define (node-at address) + (define (get-node address) + (list-ref (list-ref nodes (address-x address)) + (address-y address))) + (if (white-move?) + (get-node address) + (graph-node-view (get-node (invert-address address)) + rotate-180-view))) +``` + +The inverse of node-at is the delegate procedure address-of. Each node has an edge, labeled with address, with its address as the value. As with node-at, if this is a Black move the returned address must be translated. + +``` +(define (address-of node) + (let ((address (node 'edge-value 'address))) + (if (white-move?) + address + (invert-address address)))) +``` + +The delegate procedure next-turn advances the board after a move is made: + +``` +(define (next-turn) (loop (+ turn 1))) +``` + +Connecting the squares to their neighbors does address arithmetic to handle (literal) edge cases, creating a labeled edge + +between each square and each of its neighbors. It also creates the address edge for each node. + +``` +(define (connect-up-square address board) + (let ((node (board 'node-at address))) + (node 'connect! 'address address) + (for-each-direction + (lambda (label x-delta y-delta) + (let ((x+ (+ (address-x address) x-delta)) + (y+ (+ (address-y address) y-delta))) + (if (and (<= 0 x+ chess-board-last-index) + (<= 0 y+ chess-board-last-index)) + (node 'connect! label + (board 'node-at + (make-address x+ y+))))))))) +(define (for-each-direction procedure) + (procedure 'north 0 1) + (procedure 'northeast 1 1) + (procedure 'east 1 0) + (procedure 'southeast 1 -1) + (procedure 'south 0 -1) + (procedure 'southwest -1 -1) + (procedure 'west -1 0) + (procedure 'northwest -1 1)) +``` + +An address is represented as a list of column and row number: + +``` +(define (make-address x y) (list x y)) +(define (address-x address) (car address)) +(define (address-y address) (cadr address)) +(define (address= a b) + (and (= (address-x a) (address-x b)) + (= (address-y a) (address-y b)))) +(define (invert-address address) + (make-address (- chess-board-last-index + (address-x address)) + (- chess-board-last-index + (address-y address)))) +``` + +A piece is represented by data incorporating its piece type and its color. Our convention is that at the *n*th turn, each piece on the board will be connected to the node representing the square it occupies by an edge from that node with the label *n*. This is a + +consequence of graph immutability; otherwise we could just use a side effect to modify the edge. To populate the board, we connect each piece to the node for its initial square with an edge labeled 0. + +``` +(define (populate-sides board) + (define (populate-side color home-row pawn-row) + (define (do-column col type) + (add-piece col home-row type) + (add-piece col pawn-row 'pawn)) + (define (add-piece col row type) + ((board 'node-at (make-address col row)) + 'connect! 0 (make-piece type color))) + (do-column 0 'rook) + (do-column 1 'knight) + (do-column 2 'bishop) + (do-column 3 'queen) + (do-column 4 'king) + (do-column 5 'bishop) + (do-column 6 'knight) + (do-column 7 'rook)) + (populate-side 'white 0 1) + (populate-side 'black 7 6)) + We can now start a game: +(define the-board) +(define (start-chess-game) + (set! the-board (make-chess-board)) + (print-chess-board the-board)) +``` + +And we get this nice chessboard image: + +#### **4.5.5 Chess moves** + +Now that we have a chessboard, populated with pieces, we need a way to move those pieces around. If a piece is in a particular square at a particular turn, the node representing that square has an edge, with the turn as its label, whose value is the piece. The following delegate procedures in make-chess-board-internal on page 218 are relevant here: + +``` +(define (piece-at address) + (piece-in (node-at address))) +(define (piece-in node) + (and (node 'has-edge? turn) + (node 'edge-value turn))) +(define (set-piece-at address piece) + ((node-at address) 'connect! (+ turn 1) piece)) +``` + +We use piece-at to obtain a piece that we expect to move, given its address. Of course, it is always a good idea to check for obvious errors. + +``` +(define (get-piece-to-move board from) + (let ((my-piece (board 'piece-at from))) + (if (not my-piece) + (error "No piece in this square:" from)) + (if (not (eq? (board 'color) (piece-color my-piece))) + (error "Can move only one's own pieces:" + my-piece from)) + my-piece)) +``` + +To actually make a move we pick the piece up and set it down in the target square. However, this move is allowed only if the target square is empty or if it is occupied by an opponent piece to be captured. + +``` +(define (simple-move board from to) + (let ((my-piece (get-piece-to-move board from))) + (let ((captured (board 'piece-at to))) + (if (not (no-piece-or-opponent? captured my-piece)) + (error "Can't capture piece of same color:" + captured))) + ;; The move looks good; make it so: + (board 'set-piece-at to my-piece) + ;; Now update all the unaffected pieces to + ;; the next state of the board: + (for-each (lambda (address) + (if (not (or (address= from address) + (address= to address))) + (let ((p (board 'piece-at address))) + (if p + (board 'set-piece-at address p))))) + board-addresses) + (board 'next-turn))) +``` + +Notice that we didn't put in a check that the piece we want to move is able to make that move. Our only descriptions of the legal moves available to each kind of piece are in the graph patterns that we built in section 4.5.3. In exercise 4.24 on page 225 we will fix this problem. + +But first, let's use the matcher to determine whether a move described by such a path pattern is a capture: + +``` +(define (capture? board from path) + (let* ((my-piece (get-piece-to-move board from)) + (dict +``` + +``` +(graph-match path + (match:extend-dict chess-board:var ;** + board + (match:new-dict)) + (board 'node-at from)))) +(and dict + (let* ((target (match:get-value 'target-node dict)) + (captured (board 'piece-in target))) + (and captured + '(capture ,my-piece + ,captured + ,(board 'address-of target))))))) +``` + +The line marked by ;\*\* adds a special binding in the initial dictionary, which is used by some pattern restrictions that need to interrogate the board. + +For convenience, chess-move updates the board with a move, then prints the board for the player who will move next. + +``` +(define (chess-move from to) + (set! the-board (simple-move the-board from to)) + (print-chess-board the-board)) +``` + +To demonstrate this code we can make an interesting position: + +``` +(define (giuoco-piano-opening) + (start-chess-game) + (chess-move '(4 1) '(4 3)) ;W: P-K4 + (chess-move '(3 1) '(3 3)) ;B: P-K4 + (chess-move '(6 0) '(5 2)) ;W: N-KB3 + (chess-move '(6 0) '(5 2)) ;B: N-QB3 + (chess-move '(5 0) '(2 3)) ;W: B-QB4 + (chess-move '(2 0) '(5 3))) ;B: B-QB4 +(giuoco-piano-opening) +``` + +After lots of printout, we obtain the following board position: + +At this point the White Knight at King Bishop 3 is attacking the Black Pawn at King 5. It is not a good idea to take that piece because it is defended by the Black Knight at Queen-Bishop 6, and one should not exchange a knight for a pawn. However, we can use a graph pattern from the knight moves to check that this is a possible capture: + +``` +(capture? the-board + (make-address 5 2) + '((? source-node ,(occupied-by 'knight)) + north (?) north (?) + west (? target-node ,maybe-opponent))) +(capture (knight white) (pawn black) (4 4)) +``` + +#### Indeed, it is the only possible capture for this knight: + +``` +(filter-map (lambda (path) + (capture? the-board + (make-address 5 2) + path)) + all-knight-moves) +((capture (knight white) (pawn black) (4 4))) +``` + +## **Exercise 4.24: Legal chess moves** + +In exercise 4.23 on page 216 we made a library of patterns for all legal chess moves. Modify the simple-move program (page 222) to check that the piece being moved is allowed to move in the way requested. + +#### **4.5.6 Implementing graph matching** + +The entry point for using a graph pattern is: + +``` +(define (graph-match path dict object) + ((gmatch:compile-path path) object dict + (lambda (object* dict*) + dict*))) +``` + +We compile the path pattern into a match procedure that takes the graph object (a node) to start from, an initial dictionary, and a success continuation. If the pattern successfully matches a sequence of edges starting with that node, it calls the success continuation, which takes the node (object\*) at the end of the matched path and a dictionary of bindings accumulated in the match, as described in section 4.3. [18](#page-84-7) If the pattern fails to match the given object the match procedure returns #f. + +The patterns that we are using for matching against graphs are *expressions* of a small language that we want to compile into match procedures. The syntax of graph-pattern expressions can be described in BNF. Here a postfix \* indicates 0 or more occurrences, postfix + indicates 1 or more, and postfix ? indicates 0 or 1 occurrence. An infix | indicates alternatives. Items surrounded in " are literal strings. For example, a pattern variable to match a single element starts with (?, has an optional name and optional predicate, and ends with ). + +``` + = + = + = | | + = +``` + +``` + = | + = "(?" ? ? ")" + = "(?*" ? ? ")" + = + = + = * + = + + | "(*" ")" ; repeat any number of times + | "(+" ")" ; repeat at least once + | "(opt" ")" ; one or zero instances + | "(or" + ")" + | "(and" + ")" + = "(" ")" +``` + +In our graph-matching language every path in a graph starts with a node variable. A node variable is a single-element variable, which satisfies the predicate match:element-var?. We compile a path as follows: + +``` +(define (gmatch:compile-path path) + (if (and (pair? path) (match:element-var? (car path))) + (gmatch:finish-compile-path (cdr path) + (gmatch:compile-var (car path))) + (error "Ill-formed path:" path))) +``` + +Here we check that the first element of path is an element variable; if so, we compile it into a variable matcher. The remainder of the path, if any, is compiled by finish-compile-path: [19](#page-85-0) + +``` +(define (gmatch:finish-compile-path rest-elts matcher) + (if (null? rest-elts) + matcher + (gmatch:seq2 matcher + (gmatch:compile-path-elts rest-elts)))) +``` + +where seq2 produces a match procedure that sequentially matches its match-procedure arguments: + +``` +(define (gmatch:seq2 match-first match-rest) + (define (match-seq object dict succeed) + (match-first object dict + (lambda (object* dict*) +``` + +``` +(match-rest object* dict* succeed)))) +match-seq) +``` + +The variable matcher match-first, produced by compile-var, will match the initial node of the path, and the resulting dictionary dict\* is then used by the result of compile-path-elts (matchrest) to match the remainder of the path, starting with the edge object\*. + +There are only a few cases for compiling path-element patterns. Either the path starts with an edge label and a target node, or it starts with a special match form (\*, +, opt, or, and): + +``` +(define (gmatch:compile-path-elts elts) + (let ((elt (car elts)) + (rest (cdr elts))) + (cond ((and (symbol? elt) (pair? rest)) + (gmatch:finish-compile-path (cdr rest) + (gmatch:compile-edge elt (car rest)))) + ((pair? elt) + (gmatch:finish-compile-path rest + (gmatch:compile-path-elt elt))) + (else + (error "Ill-formed path elements:" elts))))) +``` + +An edge may be labeled by any symbol that is not one of the special symbols (\*, +, opt, or, and) used by graph-matcher patterns. The matcher for a simple labeled edge is then compiled by: + +``` +(define (gmatch:compile-edge label target) + (let ((match-target (gmatch:compile-target target))) + (define (match-edge object dict succeed) + (and (graph-node? object) + (object 'has-edge? label) + (match-target (object 'edge-value label) + dict succeed))) + match-edge)) +``` + +The edge matcher, match-edge, checks that the object is a graph node, that there is an edge with the given label emanating from that object, and that the target of the edge (the edge-value) will match (using match-target) the pattern for the target in the graph-match + +pattern. The match procedure match-target used in match-edge is made by the compiler compile-target. + +There are only two possibilities when compiling a target: a variable or a constant. + +``` +(define (gmatch:compile-target elt) + (if (match:var? elt) + (gmatch:compile-var elt) + (let () + (define (match-constant object dict succeed) + (and (eqv? elt object) + (succeed object dict))) + match-constant))) +``` + +The special match forms are handled by compile-path-elt: + +``` +(define (gmatch:compile-path-elt elt) + (let ((keyword (car elt)) + (args (cdr elt))) + (case keyword + ((*) (gmatch:compile-* args)) + ((+) (gmatch:compile-+ args)) + ((opt) (gmatch:compile-opt args)) + ((or) (gmatch:compile-or args)) + ((and) (gmatch:compile-and args)) + (else (error "Ill-formed path element:" elt))))) +``` + +Compiling a pattern with optional path elements works as follows: There is a recursive call to compile-path-elts with the path element patterns for the optional sequence of path elements, to obtain matcher, the matcher for the elements that are optionally present in the path. When match-opt is applied to a graph node object, the matcher for those path elements is applied; but if it fails, returning #f, the match succeeds with the original object and the original dictionary. + +``` +(define (gmatch:compile-opt elts) + (let ((matcher (gmatch:compile-path-elts elts))) + (define (match-opt object dict succeed) + (or (matcher object dict succeed) + (succeed object dict))) + match-opt)) +``` + +A pattern with repeated path elements, for example the pattern (\* north (?\* ,unoccupied)) in basic-queen-moves on page 215, is compiled like this: + +``` +(define (gmatch:compile-* elts) + (gmatch:* (gmatch:compile-path-elts elts))) +``` + +As for a pattern requiring an optional sequence of path elements, the compiler is called recursively to obtain a matcher for the potentially repeated sequence, which is then passed to gmatch:\*: + +``` +(define (gmatch:* matcher) + (define (match-* object dict succeed) + (or (matcher object dict + (lambda (object* dict*) + (match-* object* dict* succeed))) + (succeed object dict))) + match-*) +``` + +The graph-pattern matcher match-\* tries to use the matcher passed to it on the graph node object supplied. If it succeeds, match-\* calls itself recursively to try the part of the graph where the last match left off. Eventually it will fail to progress, succeeding with the graph object that matcher failed on. + +Compiling patterns requiring at least one, but possibly many, repetitions of a sequence of path elements, indicated with +, is similar to \*. It uses gmatch:\* as above, but requires at least one matching element first: + +``` +(define (gmatch:compile-+ elts) + (let ((matcher (gmatch:compile-path-elts elts))) + (gmatch:seq2 matcher (gmatch:* matcher)))) +``` + +The remaining special path patterns are and and or, each of which contains a number of subpath patterns. An and element must match all of the subpath patterns starting at the current node. An or element must match at least one of the subpath patterns starting at the current node. + +``` +(define (gmatch:compile-and elt-lists) + (gmatch:and (map gmatch:compile-path-elts elt-lists))) +``` + +``` +(define (gmatch:compile-or elt-lists) + (gmatch:or (map gmatch:compile-path-elts elt-lists))) +``` + +### The procedures and and or are where the real work happens: + +``` +(define (gmatch:and matchers) + (lambda (object dict succeed) + (if (null? matchers) + (succeed object dict) + (let loop ((matchers matchers) (dict dict)) + ((car matchers) object dict + (if (null? (cdr matchers)) + succeed + (lambda (object* dict*) + (loop (cdr matchers) dict*)))))))) +(define (gmatch:or matchers) + (lambda (object dict succeed) + (let loop ((matchers matchers)) + (if (pair? matchers) + (or ((car matchers) object dict succeed) + (loop (cdr matchers))) + #f)))) +``` + +The procedure compile-var compiles a pattern variable. It is called from compile-path and compile-target, and has four mutually exclusive cases to handle variables with or without the optional name and predicate: + +``` +(define (gmatch:compile-var var) + (cond ((match-list? var gmatch:var-type?) + (gmatch:var-matcher (car var) #f #f)) + ((match-list? var gmatch:var-type? symbol?) + (gmatch:var-matcher (car var) (cadr var) #f)) + ((match-list? var gmatch:var-type? symbol? +procedure?) + (gmatch:var-matcher (car var) (cadr var) (caddr +var))) + ((match-list? var gmatch:var-type? procedure?) + (gmatch:var-matcher (car var) #f (cadr var))) + (else + (error "Ill-formed variable:" var)))) +``` + +The procedure var-type? matches the type symbol of a pattern variable: ? or ?\*. To recognize the four cases of variables, compilevar uses a utility procedure match-list?, which is true if its first argument is a list and each element of the list satisfies the corresponding predicate argument. + +``` +(define (match-list? datum . preds) + (let loop ((preds preds) (datum datum)) + (if (pair? preds) + (and (pair? datum) + ((car preds) (car datum)) + (loop (cdr preds) (cdr datum))) + (null? datum)))) +``` + +The procedure var-matcher is the matcher for variables, now that we have decoded their syntax. + +``` +(define (gmatch:var-matcher var-type var-name restriction) + (define (match-var object dict succeed) + (and (or (not restriction) + (restriction object dict)) + (if var-name + (let ((dict* + (gmatch:bind var-type var-name object + dict))) + (and dict* + (succeed object dict*))) + (succeed object dict)))) + match-var) +``` + +Here bind adds a binding for var-name with value object, returning a new dictionary. If the dictionary already has such a binding, and its value is different from object, bind returns #f to indicate a match failure. + +And with this we have finished the graph matcher. + +## **Exercise 4.25: Graph matching** + +The graph matcher described here is very useful, but there are problems for which it isn't well suited. What is an interesting problem that requires extension(s) to the matcher? Find such a problem, define and implement the extension(s), and demonstrate its use on some examples. + +## **4.6 Summary** + +Patterns are fun, but they are also a very useful way to organize parts of a system for additivity. In this chapter we have seen how to build a term-rewriting system. A rule-based term-rewriting system makes it easy to write programs that do successive replacements of parts of an expression with "equivalent" parts, terminating when no more rules are applicable. Such systems are important components of larger systems that do symbolic manipulation. Algebraic expression simplification is one application, but compilers do huge amounts of this kind of manipulation, to compute optimizations and sometimes to generate code. + +We also saw a flexible way to construct a pattern matcher, by "compiling" a pattern into a combination of simple matchers that all have the same interface structure. This makes it easy to add new features and to make such a system very efficient. When we add segment variables, which match an unspecified number of elements, to such a matcher we find that we have to implement a backtracking system, because there may be multiple possible matches to any particular data if the pattern has more than one segment variable. This complicates matters significantly. Besides the intrinsic complexity of backtracking, the backtracking in the pattern matcher must be interfaced to the backtracking system in the rule executive that uses the patterns. We will examine more general ways of dealing with backtracking in section 5.4. We will investigate even more powerful backtracking strategies in section 7.5.2. + +If we model partially specified data as patterns with holes (represented by pattern variables), then we find that we need to match patterns against each other to collect the constraints on the data so that we can sharpen the specification. We explored *unification*: the process of merging partial information structures of this kind. This is essentially a way of setting up and solving symbolic equations for the missing parts of the data. Unification is + +very powerful, and we showed how to make a simple type-inference engine using unification in this way. + +We found that the ideas of pattern matching can be extended to operate on general graphs rather than just hierarchical expressions. This made it easy to work with such complex graphs as chess boards, where we used patterns to specify legal chess moves. Patterns and pattern matching can be a way to express computational thought, and on some problems can be more revealing than other programming methods. But be careful: pattern matching is not the answer to all of the world's problems, so let's not become addicted to it. + +- [1](#page-3-0) Of course, a very clever matcher could deduce that y=0, under the assumption that we are dealing with numbers. +- [2](#page-8-0) See section 5.4.2 on page 273 for more examples and explanation of this success/failure pattern. +- [3](#page-14-0) This strategy for building pattern matchers was first described by Carl Hewitt in his PhD thesis [56]. +- [4](#page-30-0) The unifier is unique for patterns with only element variables. This is a theorem; we will not prove it here. In section 4.4.4 we will extend our unifier to include segment variables. However, when the patterns have segment variables, unification will generally yield multiple matches. +- [5](#page-30-1) For an extensive survey of unification see [6]. +- [6](#page-33-0) In the guts of this unifier it is convenient for a failure to make an explicit call to a failure continuation. But in unify:internal we transition to a different convention for indicating a failure: returning #f from a success continuation. This is to make the convention for use of the unifier the same as the convention for use of the matcher of section 4.3.This is an interesting transition. + +In the rule system in section 4.2.2 we used explicit success and failure continuations, so to use the matcher in the rule system we had to make the reverse transition: the matcher used the #f convention, so make-rule (on page 166) had to implement the transition.The choice of convention for implementing failure in a backtracking system is usually a matter of style, but the use of an explicit failure continuation is often easier to extend. Luckily, it is easy to interface these disparate ways of implementing backtracking. + +- [7](#page-33-1) As in the pattern matching system described in section 4.3, the unification matcher is organized around lists of terms to allow later extension to segment variables. +- [8](#page-37-0) In the unification literature this is called the "occurs check." The occurs check is used to prevent trying to obtain a solution to an equation like *x* = *f*(*x*). Such a fixed-point equation may be solvable, in some cases, if we know more about the function *f*, but this unifier is a *syntactic* matcher. One could put in a hook at this point to ask for a more powerful equation solver to help, but we are not doing that. Most Prolog systems avoid implementing the occurs check for efficiency reasons. +- [9](#page-38-0) Because unification is so important, there has been a great deal of work developing efficient algorithms. Memoization can be used to make large improvements. For an extensive exposition of unification algorithms see [6]. +- [10](#page-50-0) Others have added segment variables to pattern matchers or unifiers [5], with some success. Apparently there are versions of Prolog that have segment variables [34]. A detailed theoretical treatment of an algorithm that includes sequence variables (another name for segment variables) in a unifier can be found in Kutsia's PhD thesis [79]. However, here we are not trying to build a complete and correct segment unifier. We are just trying to show how easy it is to add some useful new behavior to the elementary unification procedure already built. + +- [11](#page-50-1) The extension to segments is very subtle. We thank Kenny Chen, Will Byrd, and Michael Ballantyne for helping us think about this experiment. +- [12](#page-51-0) The procedure complement is a combinator for predicates: complement makes a new predicate that is the negation of its argument. +- [13](#page-53-0) This is a one-sided match that could also be done with the earlier matcher, but this ability to match expressions with variables on both sides of the match is useful. +- [14](#page-60-0) For an example of how a graph node is used, see g:cons on page 210. For a more complete description of bundle procedures see page 395. +- [15](#page-64-0) Castling is another special case. Castling is allowed under restricted circumstances: when the king and the rook are in their initial positions, the squares between the king and rook are unoccupied, and the king is not in check and will not have to traverse or land in a square where it would be in check. +- [16](#page-64-1) There is also a pawn move, en passant capture, that depends on the opponent's previous move. +- [17](#page-66-0) We use zero-based indexing, unlike the traditional chess conventions, but this is not important except for input and output to players. +- [18](#page-74-0) But notice that the success continuation of the graph-matcher procedure is different from the success continuation of the expression-matcher procedure. The expression-matcher success continuation takes a dictionary and a number of elements eaten by the matcher (to make segments work), whereas the graphmatcher success continuation takes the final node and the dictionary resulting from matching the matched part of the graph. + +[19](#page-75-0) Although the actual name of the procedure is gmatch:finishcompile-path, we abbreviate such names to elide the gmatch: prefix in text explanations. \ No newline at end of file diff --git a/raw/book/설계원칙-287-362.md b/raw/book/설계원칙-287-362.md new file mode 100644 index 0000000..2630125 --- /dev/null +++ b/raw/book/설계원칙-287-362.md @@ -0,0 +1,2219 @@ +# **Evaluation** + +One of the best ways to attack a problem is to make up a domainspecific language in which the solution is easily expressed. If the language you make up is powerful enough, many problems that are similar to the one you are attacking will have easy-to-express solutions in your language. This strategy is especially effective if you start with a flexible mechanism. We explored this idea in limited contexts in chapters 2, 3, and 4. Here we will pursue this idea in full generality. + +When we make up a language we must give it meaning. If we want the expressions of the language to describe computational processes, we must build a mechanism that, when given expressions in the language, evolves the desired process. An *interpreter* is just such a mechanism. We will explore this creative realm starting with an extensible version of the applicative order Scheme eval/apply interpreter similar to the ones described in SICP [1], Chapter 4. + +Scheme procedures are strict, requiring each argument to be evaluated before the body of the procedure is entered. We next generalize our interpreter, adding declarations to the formal parameter list of a procedure. These declarations will allow a procedure to defer evaluation of the corresponding argument to when its value is actually needed, providing for lazy evaluation, with or without memoization of the value. This declaration mechanism can also be used for other information, such as types and units. + +An interpreter is rather inefficient, because it must analyze the expression to be interpreted in order to know what to do at each step. This effort is repeated each time the interpreter encounters the + +same expression. So we next separate the interpretation into two phases, analysis and execution. The analysis phase examines the expression and compiles an execution procedure, which when called will perform the intent of the expression. The execution procedure runs without access to the expression it was compiled from. The execution procedures all have the same form, and constitute a system of combinators. + +We next add McCarthy's amb operator to allow us to do nondeterministic evaluation and search. Remarkably, this requires no change to the analysis part of the evaluator. The only change required is in the format of the execution procedures, which are reexpressed in continuation-passing style. The use of continuationpassing style suggests exposing the underlying continuation to the programmer. + +The procedure call/cc that exposes the underlying continuation is a standard procedure in Scheme, and it turns out that all we need is call/cc to implement amb directly in Scheme, so we conclude by showing how to do this. + +## **5.1 Generic eval/apply interpreter** + +Our first interpreter is constructed to be extensible. All significant parts are generic procedures, and we are careful to avoid unnecessary commitments. Let's start. + +The essence of the interpreter is in two procedures: eval and apply. The procedure eval takes an expression and an environment as inputs. The expression is a combination of subexpressions that are syntactically glued together. The environment gives meanings to some of the symbols that appear in the expression. There are other symbols that have meanings that are fixed in the definition of eval. [1](#page-70-0) But most expressions are interpreted as combinations of an *operator* and *operands*. Evaluation of the operator should yield a procedure and evaluation of the operands should yield arguments. The procedure and arguments are then passed to apply. The + +procedure usually names the arguments with *formal parameters*. The procedure apply evaluates the *body* of the procedure (using eval) in an environment in which the formal parameters of the procedure are *bound* to the arguments. This is the central computational loop of the interpreter. + +What we just described is the traditional applicative-order interpreter plan. In our interpreter we will pass the unevaluated operands and the environment for their evaluation to apply to make it possible to implement a variety of evaluation strategies, such as normal order as well as applicative order. + +The language we will be implementing is a Lisp variant. [2](#page-70-1) This implies that the code is expressed as list structures. In Lisp all compound expressions are lists, some of which start with distinguished keywords. Compound expressions that have distinguished keywords are called *special forms*. The compound expressions that are not special forms are interpreted as applications of procedures to arguments. The implementation will be organized as a set of rules for each expression type, with the exception of applications, which are distinguished by not being special forms. With each rule we give the syntactic definition of the expression type. This strategy can be used to implement almost any language, though a new parser would be needed. With Lisp the reader converts the character-string input into list structures, which are natural representations of the abstract syntax tree (AST) of the language. With other languages the AST is more elaborate and the parser is much more complicated. + +### **5.1.1 eval** + +We define g:eval as a generic procedure with two arguments. + +``` +(define g:eval + (simple-generic-procedure 'eval 2 default-eval)) +``` + +The default case for eval is an *application* (sometimes described as a *combination*). + +``` +(define (default-eval expression environment) + (cond ((application? expression) + (g:apply (g:advance + (g:eval (operator expression) + environment)) + (operands expression) + environment)) + (else + (error "Unknown expression type" expression)))) +``` + +In Lisp-based languages the operator of a list representing an application is the first element of the list and the operands are the rest of the elements of the list. + +``` +(define (application? exp) (pair? exp)) +(define (operator app) (car app)) +(define (operands app) (cdr app)) +``` + +Note how the code above follows the pattern we described on page 235. We are presenting both the interpretation of a particular syntactic construct (application), and the definition of its syntax. Also as we explained there, it is necessary to handle applications as the default case of the generic procedure, because there is no special keyword identifying an application in Lisp—instead it is identified by being a list *not* starting with one of the distinguished keywords. + +An application first evaluates the operator part of the expression and then passes that value to g:apply along with the operands of the expression and the current environment. However, after evaluating the operator, we pass the value to the generic procedure g:advance. The purpose of g:advance is to continue evaluations that have been postponed. We will not need to postpone evaluations until section 5.2, so until then g:advance is just an identity function: [3](#page-71-0) + +``` +(define g:advance + (simple-generic-procedure 'g:advance 1 (lambda (x) x))) +``` + +This is not the traditional way that apply is defined. By passing along the unevaluated operands and the environment of the application we leave open the option to introduce normal-order evaluation as well as applicative-order evaluation; we also enable + +the implementation of declarations on the formal parameters, and perhaps some other options. + +For each non-application expression type we provide a handler. Self-evaluating expressions return themselves: + +``` +(define-generic-procedure-handler g:eval + (match-args self-evaluating? environment?) + (lambda (expression environment) expression)) +``` + +In Lisp languages the self-evaluating expressions include the numbers, the boolean values, and strings. In Scheme, number? is a rather complicated predicate. The objects that satisfy number? include integers of arbitrary size, rational fractions, reals, and complex numbers. [4](#page-71-1) + +``` +(define (self-evaluating? exp) + (or (number? exp) + (boolean? exp) + (string? exp))) +``` + +There may be other self-evaluating expressions, so to make that option really flexible we could have defined self-evaluating? as a generic procedure. But here this is not necessary, because we could just make another handler for g:eval to define any other selfevaluating expression type that we might want to add. + +Quotations are required in languages that allow manipulation of the symbolic expressions of the language. [5](#page-71-2) A quotation is an expression that protects a subexpression from evaluation. + +``` +(define-generic-procedure-handler g:eval + (match-args quoted? environment?) + (lambda (expression environment) + (text-of-quotation expression))) +``` + +In Lisp-based languages the list-structure representation of a quoted expression is a list beginning with the keyword quote. The reader (parser) for Lisp expands any expression beginning with an apostrophe character (e.g., '(a b c)) into a quoted expression (here (quote (a b c))). + +``` +(define (quoted? exp) (tagged-list? exp 'quote)) +(define (text-of-quotation quot) (cadr quot)) +``` + +A *tagged list* is just a list beginning with a given unique symbol: + +``` +(define (tagged-list? e t) (and (pair? e) (eq? (car e) t))) +``` + +Scheme variables are just looked up in the environment. In other languages there are more complex rules about variables. For example, in C there are *lvalues* and *rvalues*, and they are handled differently. + +``` +(define-generic-procedure-handler g:eval + (match-args variable? environment?) + lookup-variable-value) +``` + +In Lisp-based languages the variables are represented by symbols. [6](#page-71-3) + +``` +(define (variable? exp) (symbol? exp)) +``` + +The procedure lookup-variable-value looks up its argument in the given environment. If no value is found for that variable, it looks for a value in the underlying Scheme. [7](#page-71-4) If no value is found, an Unbound variable error is signaled. + +Binary conditional expressions (*if-then-else*) have a simple handler. If the predicate part of the expression evaluates to a true value, evaluate the consequent part of the expression, otherwise evaluate the alternative part of the expression. + +``` +(define-generic-procedure-handler g:eval + (match-args if? environment?) + (lambda (expression environment) + (if (g:advance + (g:eval (if-predicate expression) environment)) + (g:eval (if-consequent expression) environment) + (g:eval (if-alternative expression) environment)))) +``` + +We must call g:advance on the evaluated predicate because we need to know the value to make the decision. Notice that the evaluator for if uses the if construct of the embedding language to do the work! + +The Lisp syntax for the if expression is simple. If no alternative is specified, the value of the if expression with a false predicate is the value of the global variable the-unspecified-value. + +``` +(define (if? exp) (tagged-list? exp 'if)) +(define (if-predicate exp) (cadr exp)) +(define (if-consequent exp) (caddr exp)) +(define (if-alternative exp) + (if (not (null? (cdddr exp))) + (cadddr exp) + 'the-unspecified-value)) +(define (make-if pred conseq alternative) + (list 'if pred conseq alternative)) +``` + +The first really interesting special form is the specification of an anonymous procedure, represented by a lambda expression. A lambda expression is a special form, the constructor for procedures. Evaluation of a lambda expression constructs a procedure from the formal parameters, the body, and the current environment. The environment must be carried by the procedure if the variables in the language are lexically scoped. In a lexically scoped language the free variables in the body of the lambda expression (those that are not formal parameters) are given meanings from the lexical context (where the lambda expression appears textually). + +``` +(define-generic-procedure-handler g:eval + (match-args lambda? environment?) + (lambda (expression environment) + (make-compound-procedure + (lambda-parameters expression) + (lambda-body expression) + environment))) +``` + +### The syntax for lambda expressions is: + +``` +(define (lambda? exp) (tagged-list? exp 'lambda)) +(define (lambda-parameters lambda-exp) (cadr lambda-exp)) +(define (lambda-body lambda-exp) + (let ((full-body (cddr lambda-exp))) +``` + +``` +(sequence->begin full-body))) +(define (make-lambda parameters body) + (cons 'lambda + (cons parameters + (if (begin? body) + (begin-actions body) + (list body))))) +``` + +Note that the body of a lambda expression may contain several expressions. These are intended to be evaluated in sequence, to allow for side-effecting actions, such as assignment, or I/O control actions, such as printing. This is handled by sequence->begin, which creates a begin special form. + +``` +(define (sequence->begin seq) + (cond ((null? seq) seq) + ((null? (cdr seq)) (car seq)) + (else + (make-begin + (append-map (lambda (exp) + (if (begin? exp) + (begin-actions exp) + (list exp))) + seq))))) +``` + +Notice that the procedure sequence->begin flattens nested begin forms, preserving the order of execution. The syntax and evaluation of begin forms is defined and described on page 242. + +#### **Derived expression types** + +The expression types already introduced are sufficient to conveniently write most programs, but it is often nice to have some syntactic sugar. These can be implemented by transformations of expressions into combinations of simpler ones. Macros are a way to generalize such transformations; but we choose not to build a macro expander as part of our interpreter. [8](#page-71-5) Here we explicitly show how the Lisp multi-armed conditional can be turned into a nest of if expressions: + +``` +(define-generic-procedure-handler g:eval + (match-args cond? environment?) + (lambda (expression environment) + (g:eval (cond->if expression) + environment))) +``` + +### The procedure cond->if is a rather simple data manipulation: + +``` +(define (cond->if cond-exp) + (define (expand clauses) + (cond ((null? clauses) + (error "COND: no values matched")) + ((else-clause? (car clauses)) + (if (null? (cdr clauses)) + (cond-clause-consequent (car clauses)) + (error "COND: ELSE not last" + cond-exp))) + (else + (make-if (cond-clause-predicate (car clauses)) + (cond-clause-consequent (car clauses)) + (expand (cdr clauses)))))) + (expand (cond-clauses cond-exp))) +``` + +### And here is the syntax for the cond special form: + +``` +(define (cond? exp) (tagged-list? exp 'cond)) +(define (cond-clauses exp) (cdr exp)) +(define (cond-clause-predicate clause) (car clause)) +(define (cond-clause-consequent clause) + (sequence->begin (cdr clause))) +(define (else-clause? clause) + (eq? (cond-clause-predicate clause) 'else)) +``` + +Because cond allows a sequence of actions for the consequent of a clause, this definition also depends on sequence->begin. + +Local variables can be introduced with let expressions. These are implemented by translation into a combination with an explicit lambda expression: + +``` +(define-generic-procedure-handler g:eval + (match-args let? environment?) + (lambda (expression environment) +``` + +``` +(g:eval (let->combination expression) + environment))) +``` + +### The syntax for let is: + +``` +(define (let? exp) (tagged-list? exp 'let)) +(define (let-bound-variables let-exp) + (map car (cadr let-exp))) +(define (let-bound-values let-exp) + (map cadr (cadr let-exp))) +(define (let-body let-exp) + (sequence->begin (cddr let-exp))) +(define (let->combination let-exp) + (let ((names (let-bound-variables let-exp)) + (values (let-bound-values let-exp)) + (body (let-body let-exp))) + (cons (make-lambda names body) + values))) +``` + +### **Effects** + +If there are operations in the language that have effects, like assignment or printing, they must be sequenced, because the order is essential. In Scheme we syntactically represent such sequences of operations with begin: + +``` +(define-generic-procedure-handler g:eval + (match-args begin? environment?) + (lambda (expression environment) + (evaluate-sequence (begin-actions expression) + environment))) +(define (begin? exp) (tagged-list? exp 'begin)) +(define (begin-actions begin-exp) (cdr begin-exp)) +(define (make-begin actions) (cons 'begin actions)) +``` + +#### The real work is actually in the sequence evaluation: + +``` +(define (evaluate-sequence actions environment) + (cond ((null? actions) + (error "Empty sequence")) +``` + +``` +((null? (cdr actions)) + (g:eval (car actions) environment)) +(else + (g:eval (car actions) environment) + (evaluate-sequence (cdr actions) + environment)))) +``` + +The value returned by evaluating a nonempty sequence of expressions is the value of the last expression in the sequence. But effects caused by executing expressions in the sequence happen in the order of the sequence. + +Most effects are implemented by assignment of variables. (Indeed, input/output operations are usually implemented in hardware by assignment to particular sensitive locations in the address space.) In Scheme we allow a program to assign to a variable in the lexical environment of the assignment statement: + +``` +(define-generic-procedure-handler g:eval + (match-args assignment? environment?) + (lambda (expression environment) + (set-variable-value! (assignment-variable expression) + (g:eval (assignment-value +expression) + environment) + environment))) +``` + +### The syntax for assignment is: + +``` +(define (assignment? exp) (tagged-list? exp 'set!)) +(define (assignment-variable assn) (cadr assn)) +(define (assignment-value assn) (caddr assn)) +``` + +We also allow definition, the creation of a new variable with a given value. A definition creates a new variable in the most local lexical environment frame of the definition statement. + +``` +(define-generic-procedure-handler g:eval + (match-args definition? environment?) + (lambda (expression environment) + (define-variable! (definition-variable expression) + (g:eval (definition-value expression) + environment) + environment) + (definition-variable expression))) +``` + +The syntax for definitions is more complicated than the syntax for assignment, because we allow multiple ways to define a procedure: [9](#page-72-0) + +``` +(define (definition? exp) (tagged-list? exp 'define)) +(define (definition-variable defn) + (if (variable? (cadr defn)) ; (DEFINE foo ...) + (cadr defn) + (caadr defn))) ; (DEFINE (foo ...) ...) +(define (definition-value defn) + (if (variable? (cadr defn)) ; (DEFINE foo ...) + (caddr defn) + (cons 'lambda ; (DEFINE (foo p...) b...) + (cons (cdadr defn) ; =(DEFINE foo + (cddr defn))))) ; (LAMBDA (p...) b...)) +``` + +This completes the usual list of special forms that define the syntax of the language. Of course, the generic procedure implementation enables creation of new special forms easily, allowing the language to grow to make it more convenient to express computational ideas that were not well supported in the base language. But a language with many different syntactic constructs may be difficult to learn, document, and use; this is a classic engineering tradeoff (remember Alan Perlis's maxim on page 159). + +## **5.1.2 apply** + +The traditional Scheme apply takes two arguments, the procedure to be applied and the evaluated arguments to be passed to the procedure. This is sufficient for Scheme, because Scheme is a strict applicative-order language with only lexically scoped variables. + +By generalizing the interface to apply to take three arguments the procedure to be applied, the *un*evaluated operands, and the calling environment—we make it possible to include procedures that require normal-order evaluation for some parameters (e.g., call by need) or procedures that make declarations on parameters, such as types and units. We will make some extensions like these in section 5.2. The environment argument also makes it possible to + +accommodate non-lexically scoped variables, but we will not do so; it is generally a bad idea. We will start out with Scheme applicative order, with generic hooks for extension. + +Our apply is a generic procedure with three arguments: + +``` +(define g:apply + (simple-generic-procedure 'apply 3 default-apply)) +(define (default-apply procedure operands calling- +environment) + (error "Unknown procedure type" procedure)) +``` + +We will need handlers for the various kinds of procedures. Some procedures, like arithmetic addition (usually named by the + operator), are *strict*: they need all of their arguments evaluated before they can compute a value. In Scheme all procedures are strict, including primitive procedures (implemented in the system or hardware below the level of the language). So we need a generic handler for strict primitives: + +``` +(define-generic-procedure-handler g:apply + (match-args strict-primitive-procedure? + operands? + environment?) + (lambda (procedure operands calling-environment) + (apply-primitive-procedure procedure + (eval-operands operands calling-environment)))) +``` + +The application of a primitive procedure is "magic" at this level of detail. The operands evaluator, like if on page 238, must call g:advance on the result of evaluation to ensure a value. + +``` +(define (eval-operands operands calling-environment) + (map (lambda (operand) + (g:advance (g:eval operand calling-environment))) + operands)) +``` + +Note that the order of evaluation of the operands is determined by the behavior of map. + +Procedures constructed by evaluating lambda expressions are not primitive. Here we can take apart the procedure. We can grab the formal parameter specifications, which are the names of the formal + +parameters. We also can extract the body of the procedure, which we will pass to eval with an environment that includes the formal parameter bindings. For lexical scoping, that extended environment is built on the environment packaged with the procedure by the evaluation of the lambda expression that constructed the procedure. + +``` +(define-generic-procedure-handler g:apply + (match-args strict-compound-procedure? + operands? + environment?) + (lambda (procedure operands calling-environment) + (if (not (n:= (length (procedure-parameters procedure)) + (length operands))) + (error "Wrong number of operands supplied")) + (g:eval (procedure-body procedure) + (extend-environment + (procedure-parameters procedure) + (eval-operands operands calling-environment) + (procedure-environment procedure))))) +``` + +Here strict-compound-procedure? is true of all compound procedures that have no declarations on any of their parameters. [10](#page-72-1) + +#### **Driver loop** + +To interact with this evaluator we need a read-eval-print loop: + +``` +(define (repl) + (check-repl-initialized) + (let ((input (g:read))) + (write-line (g:eval input the-global-environment)) + (repl))) +``` + +Here g:read issues a prompt, eval>, on the terminal. It accepts characters and parses them, converting what it gets into an sexpression. That s-expression is then evaluated with g:eval with respect to the-global-environment and the result is written back to the terminal. The procedure repl calls itself tail recursively. For this to work, the global environment must be initialized: + +``` +(define the-global-environment + 'not-initialized) +``` + +``` +(define (initialize-repl!) + (set! the-global-environment (make-global-environment)) + 'done) +(define (check-repl-initialized) + (if (eq? the-global-environment 'not-initialized) + (error + "Interpreter not initialized. Run (init) first."))) +``` + +This completes the elementary evaluator. + +## **Exercise 5.1: Unbound-variable handling** + +In Lisps, including Scheme, attempting to evaluate an unbound symbol is an unbound-variable error. However, in some algebraic processes it is often sensible to allow an unbound symbol to be a self-evaluating object. For example, if we generically extend arithmetic to build algebraic expressions with symbolic values, as we did in chapter 3, it is sometimes useful to allow the following: + +``` +(+ (* 2 3) (* 4 5)) +26 +(+ (* a 3) (* 4 5)) +(+ (* a 3) 20) +``` + +Our generic arithmetic supported symbolic extensions: the operators \* and + were extended to build expressions when their arguments were not reducible to numbers. But it did not allow the use of unbound variables as literal numbers. Here the symbol a is unbound. We may want it to be self-evaluating. + +**a.** Make a generic extension to eval to allow this kind of behavior. To make this work with the numerical primitives (+, \*, -, /) it is necessary to extend their behavior as well. Note that these operators should be changed in the underlying Scheme environment. As in chapter 3, the generic operator mechanism + +may be given handlers that work in the underlying Scheme system. + +**b.** Also augment apply to allow unbound symbols in the operator position to be interpreted as literal functions, known only by their names: (+ (f 3) (\* 4 5)) ==> (+ (f 3) 20) + +These extensions to eval and apply are generally dangerous, because they hide real unbound-variable errors. Make them contingent on the value of a user-settable variable: allow-selfevaluating-symbols. + +## **Exercise 5.2:** *n***-ary procedures** + +Footnote 10 on page 246 points out a nasty assumption that we put into the g:apply handler that implies a restriction on the future expansion of this evaluator. In Scheme, if the procedureparameters of a procedure is not a list but rather a symbol, then that symbol is taken as a single parameter that will be bound to the list of arguments. [11](#page-72-2) + +In this exercise we change the interpreter to accept a single symbol as the formal parameter list, so that a procedure can be defined to take an indefinite number of arguments. In our interpreter the procedure lambda-parameters (page 239) is happy to return a single symbol, and everywhere it is called the result is passed to make-compound-procedure. That value is retrieved by procedure-parameters, which is used in g:apply. So it appears that the only part of the interpreter that needs to be changed is g:apply. + +Change g:apply to work with the new compound procedures. This can be done by rewriting the existing strict-compoundprocedure? handler of g:apply (page 246), but it is both easier and clearer to specialize that handler for the case where the procedureparameters is a list, and to add a new handler for the case where the procedure-parameters is a symbol. + +## **Exercise 5.3: Vectors of procedures** + +In mathematical text a common abuse of notation is to identify a tuple of functions with a function that returns a tuple of values. For example, if (cos 0.6) produces 0.8253356149096783 and if (sin 0.6) produces 0.5646424733950354 then we expect ((vector cos sin) 0.6) to produce #(0.8253356149096783 0.5646424733950354). + +Although we had an exercise 3.2 to extend the arithmetic to vectors, those extensions did not modify the underlying language evaluator. This behavior needs an extension to g:apply so it can handle vectors of functions as a kind of function. Make this extension, demonstrate it, and show that it interoperates with more conventional code. + +### **Exercise 5.4: Your turn** + +Invent a fun, interesting construct that can easily be implemented using generic eval/apply but would be rather painful without that kind of generic support. + +## **Exercise 5.5: Interoperation with the underlying system** + +As pointed out on page 238, evaluating the expression + +``` +eval> (map (lambda (x) (* x x)) '(1 2 3)) +``` + +in our interpreter does not work if the map in this expression refers to the map procedure from the underlying Scheme system. + +However, if we redefine map for our interpreter it does work: + +``` +eval> (define (map f l) + (if (null? l) + '() + (cons (f (car l)) (map f (cdr l))))) +map +``` + +``` +eval> (map (lambda (x) (* x x)) '(1 2 3)) +(1 4 9) +``` + +Why does it not work to use the underlying procedures that take procedural arguments, such as map? Explain. Outline a strategy to fix the problem and implement your solution. Note: This is subtle to get right, so don't spend infinite time trying to make it work perfectly. + +## **Exercise 5.6: Different quotation** + +There have been interesting languages with very different evaluation and quotation rules. For example, in MDL (see Wikipedia [91]) a symbol is assumed to be self evaluating, and variables to be looked up are distinguished with a prefix character. Also, in MDL a combination is a special form, but with an implied keyword. Our evaluator can easily be modified to interpret a MDLlike syntax, just by changing the syntax definitions. Try it! + +## **Exercise 5.7: Infix notation** + +Unlike Lisp, most computer languages use infix notations. If we wanted to include infix expressions in Scheme we might write: + +``` +(infix + "fact := lambda n: + if n == 0 + then 1 + else n*fact(n-1)") +(fact 6) ; The Lisp procedure is now defined +720 +(infix "fact(5)") ; And it can be used in infix notation. +120 +``` + +This is entirely a small matter of syntax (ha!). However, it is an interesting project to make it work. You do not need to change the interpreter. The work is parsing the character string to compile it into the corresponding Lisp expressions, in the same way that cond- >if works. Lisp programmers have done this many times, but people who program in Lisp seem to like the native Lisp Polish prefix notation! [12](#page-72-3) Oh, well... + +## **5.2 Procedures with non-strict arguments** + +In this section we will investigate adding declarations to the formal parameters of a procedure to allow deferred evaluation of the corresponding operands. + +In Scheme, procedures are *strict*. Strict procedures require evaluating all the operands of the calling expression and binding the resulting arguments to the formal parameters before the body of the procedure is evaluated. But for an if expression, the predicate part must be evaluated to determine whether to evaluate the consequent part or the alternative part; they won't both be evaluated. This is why if must be a special form, not a procedure. A *non-strict* procedure is one that defers the evaluation of some operands. How can we make it possible for a programmer to define non-strict procedures as needed, rather than just using a few special forms, such as if, that are specified in the language definition? + +For example, suppose we want to make a procedure unless that works like the special form if in that it does not evaluate the alternatives that are not needed. [13](#page-72-4) Using unless we could write: + +``` +(define (fib n) + (unless (< n 2) + (+ (fib (- n 1)) (fib (- n 2))) + n)) +``` + +For this definition of the Fibonacci function to work correctly, the second operand of the unless expression should not be evaluated if *n <* 2, and the third operand should not be evaluated if *n* ≥ 2. But + +the first operand of the unless expression must always be evaluated to determine the choice. + +We need a way to determine which operands of unless to evaluate, and which to defer. To do this we introduce a kind of declaration and write: + +``` +(define (unless condition (usual lazy) (exception lazy)) + (if condition exception usual)) +``` + +Here we define the procedure unless in terms of the special form if, but we declare that the second and third arguments are lazy. [14](#page-72-5) The first argument is, by default, strict. + +We could have many kinds of declarations on formal parameters, describing how to handle operands and arguments. A parameter could be declared lazy and memoized, to implement call by need, as are arguments to all procedures in languages like Haskell; a parameter could be declared to require that its argument satisfy given predicates, which could be types and units; etc. + +### **Implementing generalized formal parameters** + +To implement generalized formal parameters, we need a special applicator that handles the new cases. This is accomplished by adding a single handler to g:apply, similar to the earlier one for strict compound procedures (see page 246): + +``` +(define-generic-procedure-handler g:apply + (match-args general-compound-procedure? + operands? + environment?) + (lambda (procedure operands calling-environment) + (if (not (n:= (length (procedure-parameters procedure)) + (length operands))) + (error "Wrong number of operands supplied")) + (let ((params (procedure-parameters procedure)) + (body (procedure-body procedure))) + (let ((names (map procedure-parameter-name params)) + (arguments + (map (lambda (param operand) + (g:handle-operand param + operand +``` + +``` +calling-environment)) + params + operands))) +(g:eval body + (extend-environment names arguments + (procedure-environment procedure))))))) +``` + +This differs from the strict applicator in two ways: first, we must extract the names of the parameters, since they could be wrapped in declarations; second, we must handle the operands specially, depending on the declarations. This is done by the generic procedures procedure-parameter-name and g:handle-operand. + +The procedure procedure-parameter-name allows us to add declarations to a formal parameter and still be able to retrieve its name. The default handler is the identity function, so the name of an undecorated formal parameter is just itself. + +``` +(define procedure-parameter-name + (simple-generic-procedure 'parameter-name 1 (lambda (x) +x))) +``` + +The procedure g:handle-operand allows us to choose how to process an operand based on the declarations of the corresponding formal parameter: + +``` +(define g:handle-operand + (simple-generic-procedure 'g:handle-operand 3 + (lambda (parameter operand environment) + (g:advance (g:eval operand environment))))) +``` + +The default way to handle an operand without declarations is to evaluate the operand, as was previously done by eval-operands on page 245. + +We need a syntax to allow us to decorate a formal parameter with declarations. Here we choose to use a list beginning with the name of the formal parameter: + +``` +(define-generic-procedure-handler procedure-parameter-name + (match-args pair?) + car) +``` + +We will start by implementing two kinds of declarations. The first is lazy, which means the operand is evaluated only when its value is needed, for example as the predicate of an if expression. The second is lazy memo, which is like lazy except that the first time the operand is evaluated, the value is remembered so that subsequent uses do not require reevaluation. + +If a parameter is specified to be lazy (or lazy memoized) the evaluation of the operand must be postponed. The postponed expression must be packaged with the environment that will be used to give values to the free variables in that expression when its value is required. [15](#page-73-0) + +``` +(define-generic-procedure-handler g:handle-operand + (match-args lazy? operand? environment?) + (lambda (parameter operand environment) + (postpone operand environment))) +(define-generic-procedure-handler g:handle-operand + (match-args lazy-memo? operand? environment?) + (lambda (parameter operand environment) + (postpone-memo operand environment))) +``` + +Of course, we must extend g:advance, which so far has only a default handler (see page 236), to do the postponed evaluation. Notice that the result of g:advance may itself be a postponement, so we may have to advance that. + +``` +(define-generic-procedure-handler g:advance + (match-args postponed?) + (lambda (object) + (g:advance (g:eval (postponed-expression object) + (postponed-environment object))))) +``` + +If the expression is postponed with the intent of memoizing the result, the result is saved by advance-memo!: + +``` +(define-generic-procedure-handler g:advance + (match-args postponed-memo?) + (lambda (object) + (let ((value + (g:advance + (g:eval (postponed-expression object) +``` + +``` +(postponed-environment object))))) +(advance-memo! object value) +value))) +``` + +The memoized value never needs to be evaluated again. The advance-memo! procedure changes the type of the postponed object to satisfy the predicate advanced-memo? and saves the value, making it accessible by advanced-value: [16](#page-73-1) + +``` +(define-generic-procedure-handler g:advance + (match-args advanced-memo?) + advanced-value) +``` + +### **Example: Lazy pairs and lists** + +Procedures with lazy parameters give us new power. For example, we can define a constructor kons, and selectors kar and kdr, so that we can make pairs without evaluating their contents. [17](#page-73-2) Here we have implemented kons as a procedure that takes its arguments call by need (memoized lazy). It produces a message acceptor, thepair, for kar and kdr. It also puts a "sticky note" on the-pair for identifying it as the result of kons. + +``` +(define (kons (x lazy memo) (y lazy memo)) + (define (the-pair m) + (cond ((eq? m 'kar) x) + ((eq? m 'kdr) y) + (else (error "Unknown message – kons" m x y)))) + (hash-table-set! kons-registrations the-pair #t) + the-pair) +(define (kar x) + (x 'kar)) +(define (kdr x) + (x 'kdr)) +``` + +The reason why we need the sticky note is to be able to recognize a kons pair: + +``` +(define (kons? object) + (hash-table-exists? kons-registrations object)) +``` + +Using this lazy pair mechanism we can easily implement streamtype processing. Streams are like lists, but they are built as needed by the processes that consume them. [18](#page-73-3) Thus a stream that is infinitely long may be processed incrementally, with only a finite portion actual at any time. + +Some streams are finite, so it is useful to choose a representation for the empty stream. Let's make it the same as the empty list: + +``` +(define the-empty-stream '()) +(define (empty-stream? thing) + (null? thing)) +``` + +#### We can add streams: + +``` +(define (add-streams s1 s2) + (cond ((empty-stream? s1) s2) + ((empty-stream? s2) s1) + (else + (kons (+ (kar s1) (kar s2)) + (add-streams (kdr s1) (kdr s2)))))) +``` + +#### We can find the *n*th element of a stream: + +``` +(define (ref-stream stream n) + (if (= n 0) + (kar stream) + (ref-stream (kdr stream) (- n 1)))) +``` + +Given these, we can create a (potentially infinite) stream of Fibonacci numbers with two initial entries and the rest of the stream formed by adding the stream to its kdr: + +``` +(define fibs + (kons 0 (kons 1 (add-streams (kdr fibs) fibs)))) +``` + +### Then we can look at a few Fibonacci numbers + +``` +(ref-stream fibs 10) +55 +(ref-stream fibs 100) +354224848179261915075 +``` + +The usual doubly recursive Fibonacci program is exponential, so one could not expect to get the 100th entry in this sequence by that method; but the fact that the kons pairs are memoized reduces this to a linear problem. Notice that by this point in the sequence the ratio of two successive Fibonacci numbers has converged to the golden ratio in full precision: + +``` +(inexact + (/ (ref-stream fibs 100) + (ref-stream fibs 99))) +1.618033988749895 +``` + +## **Exercise 5.8: Integrating differential equations** + +Unfortunately, the use of kons does not, in itself, solve all stream problems. For example, the difficulty alluded to in SICP [1] section 4.2.3 (p. 411) does not automatically dissipate. Suppose we want to integrate a differential equation given some initial conditions. We make the following definitions: + +``` +(define (map-stream proc (items lazy memo)) + (if (empty-stream? items) + items + (kons (proc (kar items)) + (map-stream proc (kdr items))))) +(define (scale-stream items factor) + (map-stream (lambda (x) (* x factor)) + items)) +(define (integral integrand initial-value dt) + (define int + (kons initial-value + (add-streams (scale-stream integrand dt) + int))) + int) +(define (solve f y0 dt) + (define y (integral dy y0 dt)) + (define dy (map-stream f y)) + y) +``` + +We try to find an approximation to *e* by integrating *x !*(*t*) = *x*(*t*) with initial condition *x*(0) = 1. We know that *e* = *x*(1) so we write: + +``` +(ref-stream (solve (lambda (x) x) 1 0.001) 1000) +;Unbound variable: dy +``` + +### We get an error—ugh! + +However, now we have the tools to fix this problem. What has to be changed to make this work as expected? Fix this program to get the following behavior: + +``` +(ref-stream (solve (lambda (x) x) 1 0.001) 1000) +2.716923932235896 +``` + +(Yes, we know this is a terrible approximation to *e*, but it illustrates a programming point, not a numerical analysis point!) + +## **Exercise 5.9: Why not kons?** + +The kons special form is equivalent to a cons with both arguments lazy and memoized. If the arguments were not memoized, the computation (ref-stream fibs 100) above would take a very long time. + +- **a.** Is there ever an advantage to not memoizing? When might it matter? +- **b.** Why could we not have defined kons simply as + +``` +(define (kons (a lazy memo) (d lazy memo)) + (cons a d)) +``` + +using the primitive procedure cons imported from Scheme? + +**c.** More generally, the Lisp community has avoided changing cons to be kons, as recommended by Friedman and Wise (see footnote 17 on page 254). What potentially serious problems are avoided by using cons rather than kons? Assume that we do not care about small constant factors in performance. + +### **Exercise 5.10: Restricted parameters** + +One nice idea is to build restrictions into the declaration of a formal parameter. We might want to require that an arbitrary predicate be true of a parameter, similar to our use of restrictions in pattern variables in section 4.3.2. For example, we might want a procedure to take three arguments: the first is any integer, but the second is prime, and the third is unrestricted. This might be notated: + +``` +(define (my-proc (n integer?) (p prime?) g) + ...) +``` + +Unfortunately, this kind of ad hoc design does not play well with other declarations, like lazy and memo, unless we legislate the order of the declarations or make them reserved identifiers. Suppose, for convenience, we declare lazy and memo to be special keywords, and require other declarations to be announced with a keyword, such as restrict-to for a predicate: + +``` +(define (my-proc (n restrict-to integer?) + (p restrict-to prime? lazy) + g) +...) +``` + +- **a.** Design an appropriate syntax. Make sure it is extensible in that new declaration types can be added as needed. Express your syntax in BNF and change the syntax procedures of your interpreter to implement it. +- **b.** Implement predicate restrictions. If a restriction is violated at run time, the program should report an error. You may find guarantee useful here. + +## **Exercise 5.11:** *n***-ary procedures, again!** + +**a.** In exercise 5.2 on page 248 we modified the g:apply handler to allow the formal parameters of a procedure to be a single symbol that is bound to a list of the arguments. Unfortunately, this way of specifying a rest argument is not natural for a system where the formal parameters may be decorated with declarations. However, we can invent a decoration syntax that allows us to define procedures with optional and rest arguments. + +For example, if we allow the last formal parameter in the formal parameter list be decorated with the word rest, it should be bound to the unmatched arguments. This rest declaration should be usable with other declarations on that argument. So we should be able to create procedures like: + +``` +(lambda (x + (y restrict-to integer? lazy) + (z rest restrict-to list-of-integers?)) + ...) +``` + +where list-of-integers? is a predicate that is true of lists of integers. The rest declaration should be able to be used with other declarations, such as lazy and restrict-to. + +Make rest declarations work! + +**b.** It may also be useful to allow a procedure to have optional arguments, possibly with specified default values. For example, a numerical procedure could allow the user to specify a tolerance for approximation, but specify a default value if the user does not supply the tolerance: + +``` +(lambda (x (epsilon optional flo:ulp-of-one)) + ...) +``` + +Here flo:ulp-of-one is a globally defined symbol that specifies the smallest power of two that when added to 1.0 produces a value that is not equal to 1.0. In the C library it is called DBL EPSILON. (For those few of you who care, in IEEE double-precision floating point the value of flo:ulp-of-one is 2.220446049250313e-16.) + +Make optional declarations work too! Be sure that your extension can mix and match with all other declarations that make sense. + +## **5.3 Compiling to execution procedures** + +The evaluator that we have been working with is extremely flexible and extensible, but it is dumb: our programs run rather slowly. One culprit is that the evaluator is repeatedly looking at the syntax (however simple) of the program. We avoided this problem in chapter 4 by transforming each matcher pattern into a composition of matcher procedures that all have the same form—a combinator language—in section 4.3. In interpreting a language we can avoid reexamining the syntactic structure by similarly compiling into a composition of execution procedures. So before getting deeper into evaluation, let's make this transition. + +The critical idea is to separate the problem of evaluation of an expression relative to an environment into two phases. In the first phase the expression is analyzed and converted into an execution procedure. In the second phase that execution procedure is applied to an environment, producing the expected evaluation result. We implement this idea directly, as the composition of the two phases. + +``` +(define (x:eval expression environment) + ((analyze expression) environment)) +``` + +The analysis and conversion of the expression is called *compilation*, and the work that it does is said to be done at *compile time*. The compiler extracts that part of the behavior that does not depend on the values of the free variables in the expression. This is mostly syntactic analysis, but it is also a venue for some optimizations that are implementable by syntactic rules. The resulting execution procedure depends on the mapping of symbols to values specified in the environment; the work it does is said to be done at *run time*. + +#### **Analysis of expressions** + +Since we want to be able to extend the language syntax as needed, we implement the analysis as a generic procedure, with the default being an application of an operator to operands. This has to be a default for Lisp/Scheme because there is no syntactic keyword that distinguishes an application. [19](#page-73-4) + +``` +(define x:analyze + (simple-generic-procedure 'x:analyze 1 default-analyze)) +``` + +The convention for x:analyze is that it takes an expression as an argument and returns an execution procedure, which takes one argument, an environment. + +The procedure analyze captures a common usage pattern: + +``` +(define (analyze expression) + (make-executor (x:analyze expression))) +``` + +The purpose of wrapping the execution procedure with the procedure make-executor is to aid in debugging. The resulting *executor* is also a procedure, with the same arguments and returned value as the execution procedure that it wraps. One useful aspect of this wrapper is that it maintains an "execution trace" that can be helpful while determining how a program got to a point of failure. + +As we said, the default analysis is of an application. + +``` +(define (default-analyze expression) + (cond ((application? expression) + (analyze-application expression)) + (else (error "Unknown expression type" expression)))) +(define (analyze-application expression) + (let ((operator-exec (analyze (operator expression))) + (operand-execs (map analyze (operands expression)))) + (lambda (environment) + (x:apply (x:advance (operator-exec environment)) + operand-execs + environment)))) +``` + +Notice the division of labor here: the operator and the operands are extracted from the expression and analyzed to make up the execution procedures operator-exec and operand-execs. This may require significant analysis. The execution procedure for the application is then a procedure (created by the lambda expression) that takes an environment and does the application. The procedure x:apply (on page 265) is analogous to g:apply in the interpreter; but x:apply takes execution procedures for the operands, rather than the operand expressions that were used by g:apply. The procedure x:advance, analogous to g:advance, is introduced for the same reason. Every part of the evaluator can be transformed in this way. + +The transformation of self-evaluating expressions (such as numbers, boolean values, or strings) is trivial. The only hard part of this is the actual syntax of the expressions, which is handled by the Scheme parser. The text of the programs is parsed into tokens and sexpressions before it ever gets to the evaluator, so we need not concern ourselves with those complexities here. + +``` +(define (analyze-self-evaluating expression) + (lambda (environment) expression)) +(define-generic-procedure-handler x:analyze + (match-args self-evaluating?) + analyze-self-evaluating) +``` + +Quotation is easy, again because the hard part is in the parser. [20](#page-73-5) + +``` +(define (analyze-quoted expression) + (let ((qval (text-of-quotation expression))) + (lambda (environment) qval))) +(define-generic-procedure-handler x:analyze + (match-args quoted?) + analyze-quoted) +``` + +Variables are also easy. Once we identify the variable, all of the work is in the execution procedure. + +``` +(define (analyze-variable expression) + (lambda (environment) +``` + +``` +(lookup-variable-value expression environment))) +(define-generic-procedure-handler x:analyze + (match-args variable?) + analyze-variable) +``` + +Procedure definitions, expressed in Lisp/Scheme by lambda expressions, are an example of a powerful division of labor. Before building the execution procedure, the analyzer (compiler) parses the lambda expression, extracting the formal parameter specifications, and compiles the body of the expression. Thus the execution procedure for the lambda expression, and the code that eventually executes the body, need not do that work. + +``` +(define (analyze-lambda expression) + (let ((vars (lambda-parameters expression)) + (body-exec (analyze (lambda-body expression)))) + (lambda (environment) + (make-compound-procedure vars body-exec environment)))) +(define-generic-procedure-handler x:analyze + (match-args lambda?) + analyze-lambda) +``` + +The special form if is another very clear example of the advantage of separating analysis from execution. The three parts of the if expression are analyzed at compile time, allowing the execution procedure to do no more work than extract the boolean value from the predicate to decide whether to do the consequent or the alternative. The analysis of the subexpressions is not necessary to do at run time (when the execution procedure is used). + +``` +(define (analyze-if expression) + (let ((predicate-exec + (analyze (if-predicate expression))) + (consequent-exec + (analyze (if-consequent expression))) + (alternative-exec + (analyze (if-alternative expression)))) + (lambda (environment) + (if (x:advance (predicate-exec environment)) + (consequent-exec environment) + (alternative-exec environment))))) +``` + +``` +(define-generic-procedure-handler x:analyze + (match-args if?) + analyze-if) +``` + +Sequences of expressions to be evaluated are an especially good example of separation of analysis and execution. There is no good reason to recompile a sequence of expressions every time we enter the body of a procedure; this work can be done once and for all at compile time. + +The analyze-begin procedure first analyzes each subexpression of the begin expression, producing a list of execution procedures (preserving the order of the expressions in the begin expression). These execution procedures are then glued together using reduceright and a pairwise combinator that takes two execution procedures and produces an execution procedure that executes the two given execution procedures in sequence. [21](#page-73-6) + +``` +(define (analyze-begin expression) + (reduce-right (lambda (exec1 exec2) + (lambda (environment) + (exec1 environment) + (exec2 environment))) + #f + (map analyze + (let ((exps + (begin-actions expression))) + (if (null? exps) + (error "Empty sequence")) + exps)))) +(define-generic-procedure-handler x:analyze + (match-args begin?) + analyze-begin) +``` + +The treatment of assignments is not problematical in the absence of compiler optimizations. + +``` +(define (analyze-assignment expression) + (let ((var + (assignment-variable expression)) + (value-exec + (analyze (assignment-value expression)))) +``` + +``` +(lambda (environment) + (set-variable-value! var + (value-exec environment) + environment) + 'ok))) +(define-generic-procedure-handler x:analyze + (match-args assignment?) + analyze-assignment) +``` + +However, if there are compiler optimizations to be done, assignments pose serious problems. Indeed, assignments introduce time into a program: some things happen before the assignment and some happen after the assignment, and the assignment can change the events that reference the variable that was changed. Thus, for example, common subexpressions may not really have the same value if they reference a variable that can be assigned! + +Definitions are not a problem, unless we think of them (and incorrectly use them) as assignments, potentially interfering with compiler optimizations. + +``` +(define (analyze-definition expression) + (let ((var + (definition-variable expression)) + (value-exec + (analyze (definition-value expression)))) + (lambda (environment) + (define-variable! var + (value-exec environment) + environment) + var))) +(define-generic-procedure-handler x:analyze + (match-args definition?) + analyze-definition) +``` + +Special forms that are implemented by transformations of expressions, such as cond and let, are really easy in this system; we simply compile the transformed expression. Indeed, this is the place where a very general macro facility could be hooked in. + +``` +(define-generic-procedure-handler x:analyze + (match-args cond?) +``` + +``` +(compose analyze cond->if)) +(define-generic-procedure-handler x:analyze + (match-args let?) + (compose analyze let->combination)) +``` + +### **Application of procedures** + +The execution procedure for an application calls the execution procedure for the operator to obtain the compound procedure to be applied. (See analyze-application on page 260.) The operands have also been converted to execution procedures. + +The procedure x:apply is analogous to g:apply in the elementary evaluator (on page 245): + +``` +(define x:apply + (simple-generic-procedure 'x:apply 3 default-apply)) +(define (default-apply procedure operand-execs environment) + (error "Unknown procedure type" procedure)) +``` + +Note that the default-apply here is the same as the one used by g:apply except for the names of the two unused parameters. + +As before, we need handlers for application of the various kinds of procedures, with particular kinds of parameters. The application handler for strict primitive procedures has to force the arguments and then execute the primitive procedure. + +``` +(define-generic-procedure-handler x:apply + (match-args strict-primitive-procedure? + executors? + environment?) + (lambda (procedure operand-execs environment) + (apply-primitive-procedure procedure + (map (lambda (operand-exec) + (x:advance (operand-exec environment))) + operand-execs)))) +``` + +The application handler for general procedures is only slightly different than in the elementary evaluator shown earlier. The difference is that we have execution procedures rather than operand expressions to work with. + +``` +(define-generic-procedure-handler x:apply + (match-args compound-procedure? executors? environment?) + (lambda (procedure operand-execs calling-environment) + (if (not (n:= (length (procedure-parameters procedure)) + (length operand-execs))) + (error "Wrong number of operands supplied")) + (let ((params (procedure-parameters procedure)) + (body-exec (procedure-body procedure))) + (let ((names (map procedure-parameter-name params)) + (arguments + (map (lambda (param operand-exec) + (x:handle-operand param + operand-exec + calling-environment)) + params + operand-execs))) + (body-exec (extend-environment names arguments + (procedure-environment procedure))))))) +``` + +This application handler for compound procedures needs to be able to deal with the various kinds of formal parameters that may be present in the compound procedure. This is accomplished, in our usual way, by making x:handle-operand a generic procedure. The default, for an operand to be evaluated before entering the body of the compound procedure, is to immediately execute the operand execution procedure to obtain a value. However, lazy parameters and memoized lazy parameters need to be able to postpone the execution appropriately. + +``` +(define x:handle-operand + (simple-generic-procedure 'x:handle-operand 3 + (lambda (parameter operand-exec environment) + (operand-exec environment)))) +(define-generic-procedure-handler x:handle-operand + (match-args lazy? executor? environment?) + (lambda (parameter operand-exec environment) + (postpone operand-exec environment))) +(define-generic-procedure-handler x:handle-operand + (match-args lazy-memo? executor? environment?) + (lambda (parameter operand-exec environment) + (postpone-memo operand-exec environment))) +``` + +The postponement of an execution procedure for an operand is the same as the postponement of an operand expression. But the handlers for the generic procedure x:advance to deal with a postponed operand execution procedure are different from those for g:advance: the postponed execution procedure must be called on the postponed environment rather than evaluated relative to that environment (compare with g:advance on page 253). + +``` +(define-generic-procedure-handler x:advance + (match-args postponed?) + (lambda (object) + (x:advance ((postponed-expression object) + (postponed-environment object))))) +(define-generic-procedure-handler x:advance + (match-args postponed-memo?) + (lambda (object) + (let ((value + (x:advance ((postponed-expression object) + (postponed-environment object))))) + (advance-memo! object value) + value))) +``` + +The handling of operands in this x:apply is not very clever. In fact, it does lots of "parsing" of the formal parameter list in the execution procedure, so we really did not fully compile the compound procedure. One step to improve this compilation would be to separate out the handler for strict compound procedures, as we did earlier. Fixing this nastiness is your job in exercise 5.16. + +## **Exercise 5.12: Implementing** *n***-ary procedures** + +In exercises 5.2 and 5.11 we noted that it is often valuable to have procedures that can take an indefinite number of arguments. The addition and multiplication procedures in Scheme are examples of such procedures. + +To define such a procedure in Scheme, we specify the formal parameters of a lambda expression as a single symbol rather than a list. That symbol is bound to a list of the arguments supplied. For + +example, to make a procedure that takes several arguments and returns a list of the squares of the arguments, we can write: + +``` +(lambda x (map square x)) +or +(define (ss . x) (map square x)) +and then we can say +(ss 1 2 3 4) ==> (1 4 9 16) +``` + +Modify the analyzing interpreter to allow this construct. + +Hint: You do not need to change the code involving define or lambda in the syntax definitions! This is entirely a change in the analyzer. + +Demonstrate that your modification allows this kind of procedure and that it does not cause other troubles. + +## **Exercise 5.13: Simplifying debugging** + +One problem with this compiler is that the execution procedures are all anonymous lambda expressions. So there is little information for a backtrace to report. However, it is easy to improve matters. If we rewrite the procedure that makes execution procedures for applications + +``` +(define (analyze-application exp) + (let ((operator-exec (analyze (operator exp))) + (operand-execs (map analyze (operands exp)))) + (lambda (env) + (x:apply (x:advance (operator-exec env)) + operand-execs + env)))) +``` + +### like this: + +``` +(define (analyze-application exp) + (let ((operator-exec (analyze (operator exp))) + (operand-execs (map analyze (operands exp)))) +``` + +``` +(define (execute-application env) + (x:apply (x:advance (operator-exec env)) + operand-execs + env)) +execute-application)) +``` + +then (in MIT/GNU Scheme) the execution procedure will have a name that tells us what kind of execution procedure it is. Implement this idea in all the execution procedures. + +Think of, and perhaps implement, other ways we could improve the debuggability of the runtime code without impairing the execution speed. One thing you might do is add the expression exp as a "sticky note" on the execution procedure. + +## **Exercise 5.14: Constant folding** + +Assume we have a declaration to tell the analyzer that certain symbols have a given meaning (for example a declaration that the conventional arithmetic operators {+, -, \*, /, sqrt} refer to known constant procedures). Then any combination of constants with these operators, such as (/ (+ 1 (sqrt 5)) 2), may be evaluated by the analyzer at compile time and the result used instead of executing the computation at run time. This compile-time optimization is called *constant folding*. + +Implement constant folding in the analyzer. To do constant folding, the analyzer needs to know which symbols in the program text it can count on to be bound to known values. For example, it needs to know if car is actually bound to the primitive selector of pairs. Assume that the analyzer can call a procedure that finds the bindings of known symbols. This procedure should take a symbol and return the value that the analyzer may depend on, or #f if the symbol is not under control of the analyzer. + +### **Exercise 5.15: Other optimizations** + +There are many simple transformations that can improve the execution of a program. For example, we can use our patternmatching technology to make a term-rewriting system that implements peephole optimization and loop-invariant code motion. Perhaps it would be nice to add common subexpression elimination; but be careful about side effects due to assignments. Add a phase of optimization to the analysis, implement some classic compiler optimizations, and show their effects. + +# **Exercise 5.16: Compiling formal-parameter declarations** + +Although the transformation to compositions of execution procedures is quite effective, and produces much faster code than straight interpretation, the version we presented is not very clever: the compound-procedure execution procedure for x:apply parses the formal parameter list to determine how to handle the operands. This should really be done at compile time rather than run time: the analysis of the lambda expression that made the compound procedure should produce an execution procedure that knows what to do with the operands and calling environment. + +Figure this out and do it. Make sure that you do not carry the calling environment any further than is absolutely needed. + +Note: This is a big project. + +## **5.4 Exploratory behavior** + +We have already encountered explicit backtracking search for matching segment variables in pattern matching. But even in the absence of segment variables, the implementation of the termrewriting system required some backtracking search. When a rule's consequent expression determined that the match was not selective enough for the consequent to replace the matched part of the data, + +even though the antecedent pattern of the rule matched a piece of data, the consequent expression returned #f, failing back into the match and perhaps trying a different rule. + +Also, the trie mechanism for optimizing the access to a generic procedure handler requires backtracking. The trie chases a sequence of predicates that the sequence of arguments must satisfy. But there may be multiple ways that an initial segment of predicates matches the initial segment of arguments, so there is an implicit search built into the trie mechanism. + +We normally think of backtracking, and its extreme use in search, as an AI technique. However, backtracking can be viewed as a way of making systems that are modular and independently evolvable, as in the exploratory behavior of biological systems. Consider a simple but practical example: solving a quadratic equation. There are two roots to a quadratic. We could return both, and assume that the user of the solution knows how to deal with that, or we could return one and hope for the best. (The canonical square-root procedure sqrt returns the positive square root, even though there are two square roots!) The disadvantage of returning both solutions is that the receiver of that result must know to try the computation with both and either reject one, or return both results of the computation, which may itself have made some choices. The disadvantage of returning only one solution is that it may not be the right one for the receiver's purpose. This can be a real problem in simulations of physical systems. + +### **Linguistically implicit search** + +The searches we have explicitly built are okay, but perhaps we can do better by building a backtracking mechanism into the linguistic infrastructure. The square-root procedure should return one of the roots, with the option to change its mind and return the other one if the first choice is determined to be inappropriate by the receiver. It is, and should be, the receiver's responsibility to determine if the ingredients to its computation are appropriate and acceptable. This may itself require a complex computation, involving choices whose + +consequences may not be apparent without further computation; so the process is recursive. Of course, this gets us into potentially deadly exponential searches through all possible assignments to all the choices that have been made in the program. + +It is important to consider the extent to which a search strategy can be separated from the other parts of a program, so that one can interchange search strategies without greatly modifying the program. Here we take the further step of pushing search and search control into the infrastructure that is supported by the language, and not explicitly building search into our program at all. Making search implicit may encourage excessive use of search. As usual, modular flexibility can be dangerous. + +This idea has considerable history. In 1961 John McCarthy [90] had the idea of a nondeterministic operator, amb, which could be useful for representing nondeterministic automata. In 1967 Bob Floyd [35] had the idea of building backtracking search into a computer language as part of the linguistic infrastructure. In 1969 Carl Hewitt [56] proposed a language, PLANNER, that embodied these ideas. In the early 1970s Colmerauer, Kowalski, Roussel, and Warren developed Prolog [78], a language based on a limited form of first-order predicate calculus, which made backtracking search implicit. [22](#page-74-0) + +### **5.4.1 amb** + +McCarthy's amb takes any number of arguments. The value of the amb expression is the value of one of the arguments, but we don't know in advance which one is appropriate. For example, + +``` +(amb 1 2 3) +``` + +produces the value 1 or 2 or 3, depending on the future of the computation. The expression (amb), with no arguments, has no possible values: it is a computational failure, rejecting the choices previously made. + +An expression using amb may have many possible values. To see all the possible values we print one and then cause a failure, forcing + +the production of the next value, until there are no more to be had. + +``` +(begin + (newline) + (write-line (list (amb 1 2 3) (amb 'a 'b))) + (amb)) +;;; Starting a new problem (1 a) +(2 a) +(3 a) +(1 b) +(2 b) +(3 b) +;;; There are no more values +``` + +Using amb we can generate Pythagorean triples rather easily. We use amb to generate triples of integers and reject the ones that are not Pythagorean. + +To facilitate programming with amb, we introduce a helper. We use require as a filter that will force a failure and backtrack if its argument predicate expression is not true. + +``` +(define (require p) + (if (not p) (amb) 'ok)) +``` + +To obtain some integer in an interval, we write: + +``` +(define (an-integer-between low high) + (require (<= low high)) + (amb low (an-integer-between (+ low 1) high))) +``` + +With these helpers we can write the search for Pythagorean triples in a very intuitive form: + +``` +(define (a-pythagorean-triple-between low high) + (let ((i (an-integer-between low high))) + (let ((j (an-integer-between i high))) + (let ((k (an-integer-between j high))) + (require (= (+ (* i i) (* j j)) + (* k k))) + (list i j k))))) +(begin + (newline) + (write-line (a-pythagorean-triple-between 1 20)) + (amb)) +``` + +``` +;;; Starting a new problem +(3 4 5) +(5 12 13) +(6 8 10) +(8 15 17) +(9 12 15) +(12 16 20) +;;; There are no more values +``` + +This seems like a generally useful facility. Let's see how we can make it part of our language. + +### **5.4.2 Implementing amb** + +It is nice that we separated the analysis of the expressions of the language from the execution, because that allows us to change the execution without changing any of the syntactic analysis. So building nondeterministic search into the language is a matter of changing only the execution procedures. The critical step is to transform the execution procedures into continuation-passing style, where in addition to the environment argument, each execution procedure takes two continuation arguments: one, typically named succeed, that is called when the computation is successful, and the other, typically named fail, that is called when the computation is unsuccessful. + +The execution procedure returns a proposed value by calling the success continuation with the value and a failure continuation. The failure continuation is the "complaint department": if some future of the computation does not like the tendered value, it may call the failure continuation with no arguments to demand a different result. (In section 4.3 we used a returned value of #f as a failure indication. In section 4.2.2 we used success and failure continuations. The use of success and failure continuations is more flexible and can be expanded to include information about why the value was rejected.) + +So the general pattern of an execution procedure will be: + +``` +(lambda (environment succeed fail) + ;; succeed = (lambda (value fail) +``` + +``` +;; Try this value. + ;; if don't like it (fail). + ;; ...) +;; fail = (lambda () ...) +... +;; Try to make a result. If cannot, (fail). +...) +``` + +The transformation to continuation-passing style is a bit unpleasant, as it expands the code considerably, but it is basically mechanical. For example, the analyze-application procedure on page 260 is: + +``` +(define (analyze-application expression) + (let ((operator-exec (analyze (operator expression))) + (operand-execs (map analyze (operands expression)))) + (lambda (environment) + (x:apply (x:advance (operator-exec environment)) + operand-execs + environment)))) +``` + +If we transform this code to continuation-passing style we get: [23](#page-74-1) + +``` +(define (analyze-application exp) + (let ((operator-exec (analyze (operator exp))) + (operand-execs (map analyze (operands exp)))) + (lambda (env succeed fail) + (operator-exec env + (lambda (operator-value fail-1) + (a:advance operator-value + (lambda (procedure fail-2) + (a:apply procedure + operand-execs + env + succeed + fail-2)) + fail-1)) + fail)))) +``` + +This execution procedure is more complicated than the one it was derived from. In the body of the original execution procedure, the expression (operator-exec environment) returns a value to the expression (x:advance ...), which in turn returns a value to the expression (x:apply). In the new execution procedure, these + +nested expressions are gone. Each procedure "returns" by calling a procedure that accepts the results of its computation. + +Since we will often have to force a value, it is appropriate to make an abstraction that captures the forcing. The procedure executestrict hides the uninteresting details associated with the process of forcing the evaluation of a postponed expression in order to ensure an unpostponed value. In analyze-application above, it is used to force the value of the operator in order to get an applicable procedure. + +``` +(define (execute-strict executor env succeed fail) + (executor env + (lambda (value fail-1) + (a:advance value succeed fail-1)) + fail)) +``` + +The procedure execute-strict calls the given execution procedure (executor). The result of that is then passed to a:advance to be forced. The forced value is then passed to the success continuation (succeed) of execute-strict, effectively returning the result of the forcing to the caller of execute-strict. + +Using execute-strict we can rewrite analyze-application: + +``` +(define (analyze-application exp) + (let ((operator-exec (analyze (operator exp))) + (operand-execs (map analyze (operands exp)))) + (lambda (env succeed fail) + (execute-strict operator-exec + env + (lambda (procedure fail-2) + (a:apply procedure + operand-execs + env + succeed + fail-2)) + fail)))) +``` + +Each of the execution procedures has to be transformed in this way. We use execute-strict in analyze-if to force the value of the predicate of the conditional, without which we cannot proceed: + +``` +(define (analyze-if exp) + (let ((predicate-exec (analyze (if-predicate exp))) + (consequent-exec (analyze (if-consequent exp))) + (alternative-exec (analyze (if-alternative exp)))) + (lambda (env succeed fail) + (execute-strict predicate-exec + env + (lambda (pred-value pred-fail) + ((if pred-value + consequent-exec + alternative-exec) + env succeed pred-fail)) + fail)))) +``` + +Most of the transformations are straightforward, and we will not burden you with the details in this text. But there is an interesting case: assignments. Often in backtracking systems we need two different kinds of assignment. The usual permanent assignment, set!, is useful for accumulating information during a search process, such as how many times a particular branch is investigated. There is also an undoable assignment maybe-set! that must be undone if the branch it is on is retracted. The usual permanent assignment is implemented as: + +``` +(define (analyze-assignment exp) + (let ((var (assignment-variable exp)) + (value-exec (analyze (assignment-value exp)))) + (lambda (env succeed fail) + (value-exec env + (lambda (new-val val-fail) + (set-variable-value! var new-val env) + (succeed 'ok val-fail)) + fail)))) +``` + +The undoable assignment is more complex. The failure continuation passed with the successful assignment reverts the value of the assigned variable to its previous value. + +``` +(define (analyze-undoable-assignment exp) + (let ((var (assignment-variable exp)) + (value-exec (analyze (assignment-value exp)))) + (lambda (env succeed fail) + (value-exec env + (lambda (new-val val-fail) +``` + +``` +(let ((old-val + (lookup-variable-value var env))) + (set-variable-value! var new-val env) + (succeed 'ok + (lambda () + (set-variable-value! var + old-val + env) + (val-fail))))) +fail)))) +``` + +The only other interesting case is the implementation of amb itself. Here is where we have to select the next alternative if the last one tendered is rejected. This is done by the failure continuation for the current alternative: + +``` +(define (analyze-amb exp) + (let ((alternative-execs + (map analyze (amb-alternatives exp)))) + (lambda (env succeed fail) + (let loop ((alts alternative-execs)) + (if (pair? alts) + ((car alts) env + succeed + (lambda () + (loop (cdr alts)))) + (fail)))))) +``` + +If there are no alternatives left, the execution procedure for amb calls the failure continuation it was called with. This makes the program execute a depth-first search of the tree of alternatives. The alternatives are examined by cdring down the list of alternatives; thus the search proceeds in left-to-right order. [24](#page-74-2) + +Except for adjustments to the read-eval-print loop (page 246) to make it work with the continuation-passing structure, that is all there is to it! + +## **Exercise 5.17: A puzzle** + +Formalize and solve the following puzzle using amb: + +Two women (Alyssa and Eva) and four men (Ben, Louis, Cy, and Lem) are seated at a round table, playing cards. Each has a hand; no two of the hands are equally strong. + +- Ben is seated opposite Eva. +- The man at Alyssa's right has a stronger hand than Lem has. +- The man at Eva's right has a stronger hand than Ben has. +- The man at Ben's right has a stronger hand than Cy has. +- The man at Ben's right has a stronger hand than Eva has. +- The woman at Lem's right has a stronger hand than Cy has. +- The woman at Cy's right has a stronger hand than Louis has. + +What is the arrangement at the table? Is it unique up to rotation of the table? + +Use amb to specify the alternatives that are possible for each choice. Also determine how many solutions there are if we are not told that "The man at Ben's right has a stronger hand than Cy has," but rather that "The man on Ben's right is not Cy." Explain this result. + +Note: The most straightforward solution is slow; it takes a few hours on a laptop (2017). However, there is a clever solution that converges in only about 2 minutes. [25](#page-74-3) + +## **Exercise 5.18: Failure detection** + +Implement a new construct called if-fail that permits a program to catch the failure of an expression. if-fail takes two expressions. It evaluates the first expression as usual, and returns its value as usual if the evaluation succeeds. If the evaluation fails, however, the value of the second expression is returned, as in the following example: + +``` +(if-fail (let ((x (amb 1 3 5))) + (require (even? x)) + x) +``` + +``` +'all-odd) +all-odd +(if-fail (let ((x (amb 1 3 4 5))) + (require (even? x)) + x) + 'all-odd) +4 +``` + +Hint: This is trivial! + +## **Exercise 5.19: Assignment** + +What are the results of the following evaluations, where if-fail is as specified in exercise 5.18? + +``` +(let ((pairs '())) + (if-fail (let ((p (prime-sum-pair '(1 3 5 8) '(20 35 +110)))) + (set! pairs (cons p pairs)) + (amb)) + pairs)) +(let ((pairs '())) + (if-fail (let ((p (prime-sum-pair '(1 3 5 8) '(20 35 +110)))) + (maybe-set! pairs (cons p pairs)) + (amb)) + pairs)) +``` + +### You may use the following definitions: + +``` +(define (prime-sum-pair list1 list2) + (let ((a (an-element-of list1)) + (b (an-element-of list2))) + (require (prime? (+ a b))) + (list a b))) +(define (an-element-of lst) + (if (null? lst) + (amb) + (amb (car lst) + (an-element-of (cdr lst))))) +(define (prime? n) +``` + +``` +(= n (smallest-divisor n))) +(define (smallest-divisor n) + (define (find-divisor test-divisor) + (cond ((> (square test-divisor) n) n) + ((divides? test-divisor n) test-divisor) + (else (find-divisor (+ test-divisor 1))))) + (define (divides? a b) + (= (remainder b a) 0)) + (find-divisor 2)) +``` + +## **Exercise 5.20: Choice ordering** + +The amb mechanism, as written, always tries the choices in the order given in the amb expression. But sometimes we can use contextual information to make a better ordering. For example, in a board game the choice of a move from the possible legal moves should depend on the state of the game board. Let's invent a version of amb that can give us this kind of flexibility. Let's assume that each choice expression is paired with a numerical weight expression: + +``` +(choose ( ) ... ( )) +``` + +We can evaluate all the weight expressions and use them to choose the next choice expression to be evaluated and returned. Of course, after a choice is made, it is exhausted, and if a failure gets back to this choose form, the remaining weight expressions must be reevaluated before making the next choice. + +- **a.** Implement choose so that a choice with the largest weight is chosen. +- **b.** In real situations the weights are usually not strong enough to make a unique choice. Sometimes a good strategy is to make a random choice with probability that is proportional to the computed weights. Implement an alternative chooser pchoose, with the same syntax as choose, that works in this way. + +## **5.5 Exposing the underlying continuations** + +Now we are in a position to deal with real magic! + +Most languages, including Scheme, are organized around the notion of an expression. An expression has a value that it "returns." An expression is made up of subexpressions, each of which has a value that it returns to the bigger expression it is a part of. What is the essential idea of an expression? + +Consider the compound expression + +``` +(+ 1 (* 2 3) (/ 8 2)) +``` + +Of course, this has the value 11. It is computed by evaluating the operator and the operands, then applying the value of the operator (the procedure) to the values of the operands (the arguments). + +This process can be clarified by reformulating the computation in *continuation-passing style*. Here we invent new operators \*\*, //, and ++ to name the continuation-passing style multiplication, division, and addition procedures: + +``` +(define (** m1 m2 continue) + (continue (* m1 m2))) +(define (// n d continue) + (continue (/ n d))) +(define (++ a1 a2 continue) + (continue (+ a1 a2))) +``` + +These procedures differ from the usual \*, /, and + in that they do not return to their caller; rather they are defined to call their last argument with the value computed. The argument that receives the value is called the *continuation* procedure. We used continuationpassing style in sections 4.2.2 and 5.4.2 and also in the unifier on page 188. + +The computation of (+ 1 (\* 2 3) (/ 8 2)) in continuationpassing style looks like: + +``` +(** 2 3 + (lambda (the-product) ; A + (// 8 2 + (lambda (the-quotient) ; B + (++ 1 the-product the-quotient + k))))) +``` + +where k is the final continuation procedure, which takes one argument, which is the value 11 of the computation. [26](#page-74-4) + +In this example the procedure \*\* computes the product of 2 and 3 and calls its continuation procedure (the lambda expression labeled by comment A) with 6. Thus, in the body of A, the-product is bound to 6. In the body of A the procedure // computes the quotient of 8 and 2 and passes the resulting 4 to the procedure labeled B, where the-quotient is bound to 4. In the body of B the procedure ++ computes the sum of 1, 6, and 4, and passes the resulting 11 to the continuation procedure k. + +In continuation-passing style there are no nested expressions that return values. All results are passed to continuation procedures. Thus, there is no need for a stack, because there is nobody waiting for the value returned! Instead, we have linearized our expression tree in the same way that a compiler must in order to compute the value of the expression in a sequential machine. + +#### **Underlying continuations** + +The idea is that the slot in the expression that contains the subexpression is just syntactic sugar for a procedure that accepts the value of the subexpression for later use in continuing the evaluation of the expression. This idea is very powerful, because the continuation represents the entire future of the computation. This deeper understanding of the meaning of an expression allows us to escape from the single-valued expression style of programming, at the considerable cost of complexity and syntactic nesting. + +Whenever an expression is evaluated, a continuation exists that expects the result of the expression. If the expression is evaluated at top level, for example, the continuation will take the result, print it + +on the screen, prompt for the next input, evaluate it, and so on, forever. Most of the time the continuation includes actions specified by user code, as in a continuation that will take the result, multiply it by the value stored in a local variable, add seven, and give the answer to the top-level continuation to be printed. Normally these ubiquitous continuations are hidden behind the scenes, and programmers don't think much about them. Scheme provides the ability for a programmer to get the underlying continuation of an expression. An underlying continuation is a first-class object that can be passed as an argument, returned as a value, and incorporated into a data structure. Most other languages do not support the use of first-class continuations. (Languages that do have them include SML, Ruby, and Smalltalk.) + +Explicit underlying continuations are one of the most powerful (and most dangerous) tools of a programmer. Continuations give the programmer explicit control over time. A computation can be captured and suspended at one moment and restored and continued at any future time. This makes it possible to write coroutines (cooperative multitasking), and with the addition of a timer interrupt mechanism we get timesharing (preemptive multitasking). On the occasions that you may need to deal explicitly with continuations, Scheme lets you do so by creating an explicit procedure that is the current continuation. But before we can take charge of this power we need a deeper understanding of continuations. + +A continuation is a captured control state of a computation. [27](#page-74-5) If a continuation is invoked, the computation continues at the place represented by the continuation. A continuation may represent the act of returning a value of a subexpression to the evaluation of the enclosing expression. The continuation is then a procedure that when invoked returns its argument to the evaluation of the enclosing expression as the value of the subexpression. A continuation can be invoked multiple times, allowing a computation to be resumed at a particular point with different values returned by the continuation. We will see an example shortly. + +Scheme provides call-with-current-continuation (abbreviated call/cc), which gives access to the continuations that underly expression structure. The argument to call/cc is a procedure that gets the continuation of the call/cc expression as its argument. Again: a continuation is a first-class procedure that takes one argument—the value to be returned when the continuation is called. [28](#page-74-6) Here is a simple example: + +``` +(define foo) +(set! foo + (+ 1 + (call/cc + (lambda (k) + ;; k is the continuation + ;; of the call/cc expression. + ;; so if we call k with 6 + ;; then foo will get the value 11 + (k (* 2 3)))) + (/ 8 2))) +foo +11 +``` + +So call/cc calls its argument with the continuation of the call/cc. Not very exciting yet! So far this is no different from the straightforward evaluation of (+ 1 (\* 2 3) (/ 8 2)). + +But procedures in Scheme have indefinite extent. This is a game changer. Let's save the continuation for reuse. + +``` +(define bar) +(define foo) +(set! foo + (+ 1 + (call/cc + (lambda (k) + (set! bar k) + (k (* 2 3)))) + (/ 8 2))) +foo +11 +``` + +``` +(bar -2) +foo +3 +``` + +Wow, look what happened! We saved in bar the future of the computation that ultimately gives a value to foo. When we called that continuation with another value, the assignment of foo was redone, resulting in a different value of foo. + +#### **5.5.1 Continuations as nonlocal exits** + +Consider the following simple example of a nonlocal exit continuation (adapted from the Scheme report [109]): + +``` +(call/cc + (lambda (exit) + (for-each (lambda (x) + (if (negative? x) (exit x))) + '(54 0 37 -3 245 -19)) ; ** + (exit #t))) +-3 +``` + +Because Scheme's for-each procedure walks the list in left-to-right order, the first negative element encountered is -3, which is immediately returned. Had the list contained no negative numbers, the result would have been #t (since the body of the outer lambda expression is a sequence of two expressions, the for-each expression followed by returning #t). + +The use of call/cc might appear within some other expression, as in the following definition. (Traditionally, a symbol bound to an underlying continuation starts with the letter k.) + +``` +(define (first-negative list-of-numbers) + (call/cc + (lambda (k exit) + (or (call/cc (lambda (k shortcut) + (for-each (lambda (n) + (cond ((not (number? n)) + (pp '(not-a-number: +,n)) + (k exit #f)) + ((negative? n) +``` + +``` +(k shortcut n)) + (else + 'keep-looking))) + list-of-numbers) + #f)) +'no-negatives-found)))) +``` + +### This behaves as follows: + +``` +(first-negative '(54 0 37 -3 245 -19)) +-3 +(first-negative '(54 0 37 3 245 19)) +no-negatives-found +(first-negative '(54 0 37 no 245 -19)) +(not-a-number: no) +#f +``` + +This demonstrates nested continuations, where the outermost k exit continuation exits the entire call to first-negative while the inner k shortcut continuation exits only to the enclosing disjunction, then continues from there. + +In short, if a continuation captured by call/cc is ever invoked with some value, then the computation will continue by returning that value as the value of the call to call/cc that captured it and resuming execution normally from there. + +### **Exercise 5.21: Nonlocal exits** + +This exercise is to be done in the native Scheme, where it will be easier to debug and instrument than in our embedded interpreter. There is a good implementation of call/cc in the native Scheme. + +**a.** Define a simple procedure, snark-hunt, [29](#page-74-7) that takes a tree as its argument and recursively descends the tree looking for the symbol snark at any leaf. It should immediately stop searching and return #t if one is found; #f otherwise. Use call/cc. For example: + +``` +(snark-hunt '(((a b c) d (e f)) g (((snark . "oops") h) (i +. j)))) + #t +``` + +Note that the input to snark-hunt may not be composed solely of proper lists. + +**b.** How might you verify that snark-hunt exits immediately rather than silently returning through multiple return levels? Define a new procedure, snark-hunt/instrumented, to demonstrate this. + +Hint: Setting an exit status flag, then signaling an error on wayward return paths might work if placed carefully, but simply tracing via pp may be easier. Any quick and dirty hack that works will do. The goal here is to build your intuition about continuations, not to ship product-quality code. Briefly explain your strategy. + +#### **5.5.2 Nonlocal transfer of control** + +The preceding was somewhat simplistic, because the continuations captured were used only for nonlocal exits. But continuations are more powerful than that: they can be reentered once invoked. The following example illustrates the idea: [30](#page-74-8) + +``` +(define the-continuation #f) +(define (test) + (let ((i 0)) + ;; The argument to call/cc assigns the + ;; continuation produced by call/cc to the + ;; global variable the-continuation. + (call/cc (lambda (k) (set! the-continuation k))) + ;; When the-continuation is called, execution + ;; resumes here. + (set! i (+ i 1)) + i)) +``` + +The behavior is perhaps surprising. The procedure test creates a local variable i initialized to 0. It also creates a continuation representing the control state of returning from the call/cc expression in the body of the let expression and stores that state in + +the global variable the-continuation. It then increments i and returns i's new value: 1. + +``` +(test) +1 +``` + +When the-continuation is called, the call/cc returns to the body of the let expression. Execution proceeds to increment i and return its new value. The continuation can be reused to increment i again and return its new value. + +``` +(the-continuation 'OK) +2 +(the-continuation 'OK) +3 +``` + +(The argument OK is the value of the call/cc; it is ignored by the let body.) + +We save the continuation in another-continuation, so we can make a new one to be stored in the-continuation by executing test again. The call to test creates another instance of i, which is initialized to 0. + +``` +(define another-continuation the-continuation) +(test) +1 +``` + +This new continuation is independent of the one we saved in another-continuation. + +``` +(the-continuation 'OK) +2 +(another-continuation 'OK) ; uses the saved continuation +4 +``` + +Now consider the following slightly more interesting scenario: + +``` +(define the-continuation #f) +(define sum #f) +``` + +``` +(begin + (set! sum + (+ 2 (call/cc + (lambda (k) + (set! the-continuation k) + (k 3))))) + 'ok) +ok +sum +5 +(the-continuation 4) +ok +sum +6 +(the-continuation 5) +ok +sum +7 +``` + +Note carefully how reentering this captured continuation, by calling the-continuation, returns control to the point before the addition and, therefore, before assigning variable sum and returning the symbol ok. This is why invoking it always returns the symbol ok. However, sum is assigned the sum of 2 and the argument we supplied to the-continuation. So when we ask for the value of sum we get that new sum. This demonstrates how to use a captured continuation to proceed from intermediate return points. We will see how this mechanism can be used for backtracking in section 5.5.3. + +### **5.5.3 From continuations to amb** + +It turns out that almost anything we want to do, including implementing amb, can be done with just the Scheme native call/cc; let's see how to do that. + +Indeed, continuations are a natural mechanism for supporting backtracking. A choice can be made, and if that choice turns out to + +be inappropriate, an alternative choice can be made and its consequences worked out. (Wouldn't we like real life to have this feature!) In our square-root example, the square-root program should return the amb of both square roots, where amb is the operator that chooses and returns one of them, with the option to provide the other if the first is rejected. The receiver can then just proceed to use the given solution; but if at some point the receiver finds that its computation does not meet some constraint, it can fail, causing the amb operator to revise its choice and return with the new choice through its continuation. In essence, the continuation allows the generator of choices to be written as a coroutine that interacts with the receiver/tester of the choices. + +The heart of the backtracker is amb-list, which takes a sequence of sibling thunks, each representing an alternative value for the amb expression. The thunks are produced by an amb macro, which syntactically transforms amb expressions into amb-list expressions, as follows: + +``` +(amb e1 ... en) ==> + (amb-list (list (lambda () e1) ... (lambda () en))) +``` + +The amb macro (written in portable syntax-rules form) is: + +``` +(define-syntax amb + (syntax-rules () + ((amb exp ...) + (amb-list (list (lambda () exp) ...))))) +``` + +### For example: + +``` +(pp (syntax '(amb a b c) user-initial-environment)) +(amb-list (list (lambda () a) (lambda () b) (lambda () c))) +``` + +The search maintains a search schedule, an agenda of thunks that can be called when it is necessary for an amb expression to return with a new alternative value. The procedure amb-list first adds the thunks for its alternative values to the search schedule and then yields control to the first pending thunk on the schedule. If there are no alternatives (the expression was just (amb)) then the amblist yields control without adding anything to the search schedule and increments a global counter for auditing the search. + +``` +(define (amb-list alternatives) + (if (null? alternatives) + (set! *number-of-calls-to-fail* + (+ *number-of-calls-to-fail* 1))) + (call/cc + (lambda (k) + ((add-to-search-schedule) + (map (lambda (alternative) + (lambda () + (within-continuation k alternative))) + alternatives)) + (yield)))) +``` + +For a particular amb expression the thunks for the alternatives are constructed so as to return from that amb expression, using the continuation, k, captured at the entrance to their enclosing amblist. [31](#page-75-0) + +The way to yield control is to retrieve a thunk specifying an alternative, if any, from the search schedule and execute it. The search schedule is both a stack and a queue; we will see why shortly. + +``` +(define (yield) + (if (deque-empty? (*search-schedule*)) + ((*top-level*) 'no-more-alternatives) + ((pop! (*search-schedule*))))) +``` + +You may be puzzled by the fact that we call \*top-level\* and add-to-search-schedule to get the procedures that do the work. We also call \*search-schedule\* to get the search schedule object. The reason for this indirection is that these are Scheme *parameter* objects (see page 394). We have defined them this way because we will be dynamically binding them to different values, as will be shown shortly. We initialize the \*search-schedule\* to be empty: + +``` +(define *search-schedule* + (make-parameter (empty-search-schedule))) +``` + +The magic is the call/cc in amb-list. The amb-list (and thus the amb) executes the yield. The continuation of this call/cc, and + +thus of this amb, is put onto the search schedule for each alternative of this amb. When an alternative popped from the search schedule is executed, its value is returned by whatever amb expression put that alternative into the search schedule. + +By making the search schedule both a stack and a queue, we can implement both depth-first and breadth-first search, because they differ only in the order of the schedule. This is done by dynamically binding the add-to-search-schedule parameter to the ordering desired, as shown below. + +The default is depth first: + +``` +(define add-to-search-schedule + (make-parameter add-to-depth-first-search-schedule)) +``` + +The following two procedures can be used to control the search order in the execution of a thunk that encapsulates a problem to be solved, by dynamically binding add-to-search-schedule. For an example of their use, see exercise 5.22 on page 293. + +``` +(define (with-depth-first-schedule problem-thunk) + (call/cc + (lambda (k) + (parameterize ((add-to-search-schedule + add-to-depth-first-search-schedule) + (*search-schedule* + (empty-search-schedule)) + (*top-level* k)) + (problem-thunk))))) +(define (with-breadth-first-schedule problem-thunk) + (call/cc + (lambda (k) + (parameterize ((add-to-search-schedule + add-to-breadth-first-search-schedule) + (*search-schedule* + (empty-search-schedule)) + (*top-level* k)) + (problem-thunk))))) +``` + +These procedures also locally reinitialize the \*search-schedule\* and the \*top-level\* by dynamically binding them, providing control in extent rather than scope. If yield finds no more + +alternatives it can cause this search to terminate and return the value no-more-alternatives to the caller of with-...-firstschedule. For example: + +``` +(define search-order-demo + (lambda () + (let ((x (amb 1 2))) + (pp (list x)) + (let ((y (amb 'a 'b))) + (pp (list x y)))) + (amb))) +(with-depth-first-schedule search-order-demo) +(1) +(1 a) +(1 b) +(2) +(2 a) +(2 b) +no-more-alternatives +(with-breadth-first-schedule search-order-demo) +(1) +(2) +(1 a) +(1 b) +(2 a) +(2 b) +no-more-alternatives +``` + +The orderings are implemented in terms of the low-level stack and queue mutators. For depth first the alternatives are put onto the front of the schedule, and for breadth first they are put onto the end of the schedule. In both cases they appear on the schedule in the order in which they were supplied to amb. + +``` +(define (add-to-depth-first-search-schedule alternatives) + (for-each (lambda (alternative) + (push! (*search-schedule*) alternative)) + (reverse alternatives))) +(define (add-to-breadth-first-search-schedule alternatives) + (for-each (lambda (alternative) +``` + +``` +(add-to-end! (*search-schedule*) alternative)) +alternatives)) +``` + +The parameter \*top-level\* is initialized so that when no alternatives are found, the system continues in the read-eval-print loop with the given result. (In the code above, yield passes the symbol no-more-alternatives to the top level.) Note that with-...-first-schedule rebinds \*top-level\*. + +``` +(define *top-level* + (make-parameter + (lambda (result) + (abort->nearest + (cmdl-message/active + (lambda (port) + (fresh-line port) + (display "; " port) + (write result port))))))) +``` + +#### To start everything up we also need: + +``` +(define (init-amb) + (reset-deque! (*search-schedule*)) + (set! *number-of-calls-to-fail* 0) + 'done) +``` + +And finally, almost every program using amb will need require: + +``` +(define (require p) + (if (not p) (amb) 'ok)) +``` + +That is all there is to it! It is amazing what one can do with call/cc. So we do not need to make an embedded system to implement amb (as we did in section 5.4.2), if we have call/cc in our native environment. + +### **Other ways to try alternatives** + +If there are multiple possible ways to solve a subproblem, and only some of them are appropriate for solving the larger problem, sequentially trying them as in generate-and-test is only one way to proceed. For example, if some of the choices lead to very long + +(perhaps infinite) computations in the tester while others may succeed or fail quickly, it is appropriate to allocate each choice to a thread that may run concurrently. This requires a way for threads to communicate and perhaps for a successful thread to kill its siblings. All of this can be arranged with continuations, with the thread-tothread communications organized around transactions. + +## **Exercise 5.22: Breadth versus depth** + +Recall the dumb way to find Pythagorean triples (on page 272). We instrument the searcher with a counter of the number of triples tried: + +``` +(define (a-pythagorean-triple-between low high) + (let ((i (an-integer-between low high))) + (let ((j (an-integer-between i high))) + (let ((k (an-integer-between j high))) + (set! triples-tested (+ triples-tested 1)) + (require (= (+ (* i i) (* j j)) + (* k k))) + (list i j k))))) +(define triples-tested 0) +``` + +Consider the following experiment. First we try breadth-first search: + +``` +(begin (init-amb) ; to reset failure counter + (set! triples-tested 0) + (with-breadth-first-schedule + (lambda () + (pp (a-pythagorean-triple-between 10 20))))) +(12 16 20) +triples-tested +246 +*number-of-calls-to-fail* +282 +``` + +And then we try depth-first search: + +``` +(begin (init-amb) + (set! triples-tested 0) + (with-depth-first-schedule + (lambda () + (pp (a-pythagorean-triple-between 10 20))))) +(12 16 20) +triples-tested +156 +*number-of-calls-to-fail* +182 +``` + +- **a.** Explain the difference in triples-tested between depthfirst and breadth-first search (in rough terms, not the exact counts). +- **b.** Explain the difference between the number of triples tested and the \*number-of-calls-to-fail\*. Where are the extra failures coming from? +- **c.** Considering that the breadth-first search does more work, why is the following a-pythagorean-triple-from search not usable under the depth-first search strategy, although it works fine under the breadth-first strategy? + +``` +(define (a-pythagorean-triple-from low) + (let ((i (an-integer-from low))) + (let ((j (an-integer-from i))) + (let ((k (an-integer-from j))) + (require (= (+ (* i i) (* j j)) (* k k))) + (list i j k))))) +(define (an-integer-from low) + (amb low (an-integer-from (+ low 1)))) +(with-depth-first-schedule + (lambda () + (pp (a-pythagorean-triple-from 10)))) +``` + +## **Exercise 5.23: Less deterministic nondeterminism** + +Eva Lu Ator points out that our amb implementation is not as nondeterministic as one might sometimes like. Specifically, given a list of alternatives in an amb form, we always choose the leftmost alternative first, then the second leftmost, and so on, in left-to-right order. + +She suggests that one might wish to override this choice, say, by going from right to left, or even in random order. Specifically, she would like something like: + +``` +(with-left-to-right-ordering problem-thunk) +(with-right-to-left-ordering problem-thunk) +(with-random-ordering problem-thunk) +``` + +She's quick to point out that this choice of ordering is independent of the search order (depth-first, breadth-first, or other). + +- **a.** Under what circumstances might you want an unordered (random) amb? Craft a specific short example to use as a test case in part **b**. +- **b.** Implement these three choice orders and give an example use of each. For simplicity and uniformity, model your code after that for with-depth-first-schedule, add-to-depth-firstsearch-schedule, etc. Hint: Feel free to use Scheme's built-in random procedure. + +## **Exercise 5.24: Nesting strategies** + +We intended that the breadth-first and depth-first search strategies could be arbitrarily nested within searches. Does the nesting of depth-first and breadth-first scheduling work correctly as currently implemented? Specifically, design an experiment that exposes the bug (if there is one) or that demonstrates anecdotally that it does work correctly (if it does). Explain your rationale. + +This involves crafting experiments that distinguish between depth-first and breadth-first search strategies, then composing them + +in interesting ways to demonstrate local control over nested searches. + +Identify a natural class of problems for which this flexibility is useful— not just hacked together to prove a point. + +## **Exercise 5.25: Undoable assignment** + +In the embedded interpreter version of amb in section 5.4.2 we showed how to use two kinds of assignment: the usual permanent assignment, indicated by set!, and the undoable assignment, indicated by maybe-set!, which gets undone by backtracking. We can implement a general wrapper for undoable effects in the nativecode implementation of this section: + +``` +(define (effect-wrapper doer undoer) + (force-next + (lambda () (undoer) (yield))) + (doer)) +(define (force-next thunk) + (push! (*search-schedule*) thunk)) +``` + +And we can then implement maybe-set! as a macro: + +``` +(define-syntax maybe-set! + (syntax-rules () + ((maybe-set! var val) + (let ((old-val var)) + (effect-wrapper + (lambda () + (set! var val)) + (lambda () + (set! var old-val))))))) +``` + +Unfortunately, this makes sense only for depth-first search; it makes no sense for breadth-first search. Explain why. Is this fixable? + +## **Exercise 5.26: Search control in the embedded system** + +How could we change the embedded system of section 5.4.2, with analysis to combinators that have success and failure continuations, to enable both depth-first search (as it is now) and breadth-first search? Explain your strategy. Make a new implementation that incorporates this ability to control the search order. Note: This is a rather large transformation. + +## **5.6 Power and responsibility** + +In this chapter we have seen that we have great power from the Church-Turing universality of computation. We can never complain: "I cannot express this in the language I must use." If we know the tricks of interpretation and compilation we can always escape from the confines of any language because it is always possible to build an appropriate domain-specific language for the problem at hand. The exposition here uses Scheme as the underlying language and builds powerful Lisp-based languages on top of Scheme. The reason we use Lisp syntax here is because it greatly simplifies the exposition of these ideas. (See exercise 5.7 on infix notations. If we had to do this in a language with a complicated syntax the exposition would be many times longer and more tedious.) But the power of interpretation is available in any Turinguniversal language. + +It is important for future flexibility that the languages we build be simple and general. They must have very few mechanisms: primitives, means of combination, and means of abstraction. We want to be able to extend them as needed and to be able to mix and match the parts of programs. And, most important, when we have multiple languages, each of which is appropriate for some part of a problem, there must be good ways for those languages to interoperate. + +With great power comes even greater responsibility. Every time we create a language we must also document it so that it can be taught to others. The programs we write today will be read and modified by others in the future. (Indeed, even when we read next year what we wrote last year, we will be very different and we will not remember the details of what we did.) So it is important that we use this power very sparingly, and that when we do so we document the result very carefully. Otherwise we will be leaving an incomprehensible mess for the next programmer (or for ourselves!) to clean up and rewrite. Don't participate in the creation of a "Tower of Babel." + +The systems that derive from UNIX show both the good and the bad sides of this issue. The commands all have their own languages. If you know about awk and sed and grep you know that each has its own language, including the really ugly and badly defined regularexpression language we discussed in section 2.2. Certainly each of those languages helped make the immediate problems easier to solve. But they do not have a consistent underlying idea that makes them easy to learn and understand. Just think about how the quotation conventions of the shell interact with the quotation conventions of grep and you will appreciate this point. To become a UNIX guru you have to learn lots of nasty special-case stuff. On the other hand, UNIX itself has a wonderfully simple and elegant way to glue stuff together: *streams*. Each of the basic UNIX utilities takes input from streams and puts out streams. They can be connected by piping output streams to input streams. This lesson is very worth contemplating. + +[1](#page-1-0) But because our eval is a generic procedure, the set of symbols that are defined by eval may be changed easily and even dynamically. + +[2](#page-2-0) Our interpreter's implementation is made simpler by the use of Scheme as the implementation language. We inherit the Scheme + +reader, so our syntax is very simple; we inherit tail recursion, so we don't need to pay special care when implementing procedure calls; and we use Scheme procedures as primitives. If we were to choose a different implementation language, for example C, we would have many more issues to contend with. Nevertheless, it is possible to build this kind of interpreter in any language. + +- [3](#page-3-0) The use of the g: prefix in g:apply and other names serves to identify those names as specific to this "generic" interpreter. In later sections we introduce different versions of the interpreter, each of which has its own prefix. +- [4](#page-4-0) Reals are usually represented in the computer as floating-point numbers. The parts of a Scheme complex number may be integers or rational fractions, as well as reals. +- [5](#page-4-1) The understanding of quotation and its relationship to evaluation has deep consequences in analytic philosophy. One good exposition of this is in the 1982 PhD thesis of Brian Cantwell Smith [112]. +- [6](#page-5-0) A symbol is an atomic object that is named by a string of characters. What makes a symbol interesting is that it is unique: any two instances of a symbol with the same character-string name may be presumed to be identical (they are eq?). +- [7](#page-5-1) Many of the Scheme primitives found this way will work, such as car or +. However, primitives that take procedures as arguments, such as map or filter, will not accept nonprimitive procedures (i.e., those created by this interpreter from lambda expressions). This is addressed in exercise 5.5 on page 249. +- [8](#page-7-0) The real problem with macros is that they can introduce bindings that can inadvertently conflict with existing bindings, making them referentially opaque. There are several attacks on the referential-opacity problem, leading to the development of Scheme *hygienic* macro systems. See [73, 74, 8, 31]. Also, drastically modifying a language by introducing special forms + +- makes it harder for a reader to understand a program—the reader must learn the new special forms before reading the program that uses them. +- [9](#page-11-0) MIT/GNU Scheme allows a more general syntax for definitions, with recursive expansion of the cadr of the define form (see page 383). We do not do this here. +- [10](#page-13-0) We have made a decision here that limits future extension. The fact that we require the procedure parameters to be a list of the same length as the list of operands means that we cannot extend this g:apply handler to allow procedures with optional or rest parameters. So we could not define the traditional Lisp + that takes an unspecified number of arguments and adds them up! But see exercise 5.2. +- [11](#page-15-0) In Scheme, a parameter that takes all the arguments after the explicitly declared ones is called a *rest parameter*. If there are explicitly declared parameters we can use an improper list (a chain of pairs in which the last cdr is not the empty list) as our parameter list. For example (lambda (a b . c) ...) is a procedure that takes at least two arguments, which will be bound to a and b; any additional arguments supplied (after the first two) are made into a list that is the value of c. If there are no explicitly declared parameters and just a rest parameter we use a single symbol to be the name of the rest parameter. For example, in Scheme we can write (lambda xs ...) to define a procedure that takes any number of arguments and binds the parameter xs to be the list of arguments. +- [12](#page-18-0) Such an infix parser can be found on the website for this book. +- [13](#page-18-1) You may notice that this definition of unless differs from that used in many Lisp languages, including standard Scheme [109] and Emacs Lisp. +- [14](#page-19-0) Common practice uses the term "lazy evaluation" to mean that the argument's evaluation is postponed and that the result is + +- memoized. Here we separate those ideas and use lazy to mean just postponed. +- [15](#page-21-0) In the original implementations of by-name parameters in Algol-60 these combinations of expression and environment were called *thunks*. Because Scheme programs commonly use procedures with no formal parameters to package an expression to be evaluated later in some other environment, we also call such nullary procedures used in this way *thunks*. +- [16](#page-22-0) The procedure advance-memo! also drops the pointer from the postponed object to the environment for its evaluation, allowing that environment to be garbage-collected if there are no other pointers to it. +- [17](#page-22-1) An ancient but important paper by Dan Friedman and David Wise, entitled "Cons should not evaluate its arguments"[40], showed how lazy functional programming can be powerful, but is easily obtained using kons rather than cons. +- [18](#page-23-0) Scheme [109] provides delay and force for implementing streams. For more information about streams see SICP [1] and SRFI-41 [13]. +- [19](#page-29-0) This evaluator differs significantly from the previous ones, so as mentioned in footnote 3 on page 236, we use a new prefix (x:, for "eXecution procedure") to identify analogous procedures. +- [20](#page-30-0) In Lisp (and so in Scheme) the extraction of the text of the quotation is simple—it is just a cadr—but our intent is to be general enough to accommodate any language syntax. In most languages the extraction of the text of the quotation is much harder. +- [21](#page-32-0) In analyze-begin the reduce-right procedure will never use the #f argument because the #f is accessed only if the list of expressions is empty. But that would signal the error Empty sequence before the reduction started. + +- [22](#page-41-0) Erik Sandewall's survey [107] of systems that support tools for "nonmonotonic" reasoning gives more context than we can provide here. +- [23](#page-44-0) In this evaluator we use the a: prefix (for amb) to distinguish analogous procedures, as explained in footnote 19 on page 260. +- [24](#page-47-0) Our implementation of amb is not quite the idea envisioned by McCarthy. His amb is "prescient" in that it will converge to a value even if one of the alternatives diverges. Since our evaluator does a left-to-right, depth-first search of the alternatives, if *e* is an expression that diverges (computes infinitely or signals an error), our (amb *e* 5) diverges; but McCarthy's amb would return 5. This is explained beautifully by William Clinger [21]. +- [25](#page-48-0) These timings are with the embedded exploratory-behavior interpreter itself interpreted by the underlying Scheme system. If we use the Scheme compiler to compile the embedded interpreter we get a factor of about 30 speed improvement. +- [26](#page-52-0) The idea of continuation-passing style was introduced by computer language theorists to clarify the semantics of computer languages. For a complete history of this idea see [103]. In Scheme the continuations underlying subexpressions are exposed as first-class procedures [120, 61, 109]. +- [27](#page-53-0) This control state is not to be confused with the full state of a system. The full state is all the information required, along with the program, to determine the future of a computation. It includes all of the current values of mutable variables and data. The continuation does not capture the current values of mutable variables and data. +- [28](#page-54-0) But note that the Scheme report [109] allows continuations to take any number of arguments. +- [29](#page-56-0) See "The Hunting of the Snark," by Lewis Carroll, 1876. +- [30](#page-57-0) This example is adapted from Wikipedia [25]. + +[31](#page-61-0) The use of the MIT/GNU Scheme extension withincontinuation procedure, which here is approximately equivalent to the call (k (alternative)), prevents the capture of pieces of the control stack that are unnecessary for continuing the computation correctly. \ No newline at end of file diff --git a/raw/book/설계원칙-363-393.md b/raw/book/설계원칙-363-393.md new file mode 100644 index 0000000..a1e5d13 --- /dev/null +++ b/raw/book/설계원칙-363-393.md @@ -0,0 +1,816 @@ +# **Layering** + +In section 1.1 we alluded to the idea that programming could learn from the practice of architecture. A programmer might start with an executable skeleton plan (a *parti* ) to help try out an idea. When the *parti* looks good the programmer could elaborate it with more information. + +For example, declared implementation types may enable the compilation of efficient code and inhibit the occurrence of type errors. Declared dimensions and units may be added to prevent some bugs and support documentation. Assertions of predicates can help with the localization of errors that occur at run time and they could support the automatic or manual construction of proofs of "correctness." Declarations of how much precision is needed for some numerical quantities and operations can give clarity to numerical analysis problems. Suggestions of alternative implementations can enable useful degeneracy in an implementation. We can track the provenance of a result by carrying dependencies. + +But the usual way of adding these important and powerful features to the text of a program turns the program text into a tangled mess. To continue with the architecture analogy, it does not separate the served spaces from the servant spaces. The separation of the "essential" features of a program (the code that defines its behavior) from the "accidental" ones (e.g., type information for a compiler or code for logging) has been an important issue. Aspectoriented programming [67] was an attempt to address part of this problem, by explicitly identifying "cross-cutting concerns" such as + +logging. Layering is another way to effect the separation. The ability to annotate any piece of data or code with other data or code is a crucial mechanism in building flexible systems. The decoration of a value is a generalization of the tagging used to support extensible generic operations. Here we introduce the idea of *layered programming*. Both the data and the procedures that process it will be made up of multiple layers that enable additive annotation without introducing clutter. + +### 6.1 Using layers + +Layers give us the ability to sketch out a computation and then elaborate that computation with metadata that is processed along with the computation. Let's consider some annotations that we think may be valuable in many situations. For example, suppose we are interested in using Newton's force law for gravity: + +``` +(define (F m1 m2 r) + (/ (* G m1 m2) (square r))) +``` + +This is a simple numerical calculation, but we can elaborate it to carry support information and units. + +We find Newton's constant G by looking up a recent measurement published by NIST: + +``` +(define G + (layered-datum 6.67408e-11 + unit-layer (unit 'meter 3 'kilogram -1 'second -2) + support-layer (support-set 'CODATA-2018))) +``` + +Here we show the numerical value of the measurement, the units of that measurement ( $m^3/(kg s^2)$ ), and the source of the data (its support). We could extend this to also carry the uncertainty in the measurement as a range in another layer, but we won't do that here. + +We can also find the mass of the Earth, the mass of the Moon, and the distance to the Moon (semimajor axis) from other sources: + +``` +(define M-Earth + (layered-datum 5.9722e24 + unit-layer (unit 'kilogram 1) + support-layer + (support-set 'Astronomical-Almanac-2016))) +(define M-Moon + (layered-datum 7.342e22 + unit-layer (unit 'kilogram 1) + support-layer + (support-set 'NASA-2006))) +(define a-Moon + (layered-datum 384399e3 + unit-layer (unit 'meter 1) + support-layer + (support-set 'Wieczorek-2006))) +``` + +Now we can ask the question, "What is the gravitational force of attraction between the Earth and the Moon at that distance?" and we will get the answer: + +``` +(pp (F M-earth M-Moon a-moon)) +#[layered-datum 1.9805035857209e20] +(base-layer 1.9805035857209e20) +(unit-layer (unit kilogram 1 meter 1 second -2)) +(support-layer + (support-set Wieczorek-2006 + NASA-2006 + Astronomical-Almanac-2016 + CODATA-2018)) +``` + +The result gives the numerical value, the units of that result, and the sources that the result depended upon. + +### **6.2 Implemention of layering** + +There are two parts to layering. The first is that it must be possible to create a datum that contains multiple layers of information. In our example, we used layered-datum to do this. The second part is that we need to be able to enhance a procedure so that it can process + +each layer (somewhat) independently. A procedure enhanced in this way is called a *layered procedure*. + +We also need a way to assign names to layers. Every layer must have a name, so that the layer in a datum can be specified. The name is also used by a layered procedure to connect the processing for that layer to the corresponding layers in the incoming data. We have written our example to use variables to refer to layer names, as in unit-layer, which is bound to the name for the unit layer. This makes the user interface independent of the details of how a layer name is specified; this will turn out to be useful. + +Another aspect of layer naming is that there must be a distinguished *base layer*, which represents the underlying computation being performed. In our example using layereddatum, the base layer's value is distinguished by being the first argument and by not having an associated name. + +Layered data can be built from simple data structures. We can use any convenient data structure that can associate a layer name with a value and that permits many such associations. A special name can be used to identify the base layer, making the data structure simple and uniform. + +Building layered procedures is more complicated, because the processing for most layers will need some information from the computation in the base layer. For example, suppose we are multiplying two numbers that carry support information. Normally, the support of the result is the union of the supports of the arguments. But suppose one argument has a base-layer value of zero; then the support of the result is the support of the zero, and the support of the other argument is irrelevant. + +The base layer must not depend on any non-base layer because that violates the idea of the base layer: that it is an independent computation that the other layers enhance. And a non-base layer should not depend on another non-base layer. A non-base layer generally shouldn't share information with another non-base layer since its behavior would be different depending on the presence or absence of the other layer. This would be inconsistent with our general approach of building additive programs. + +So building a layered procedure involves a balance between sharing information from the base layer to the non-base layers and isolating layers in most other cases. We will address this in the next sections as we explore the details of implementing layering. + +#### **6.2.1 Layered data** + +A layered data item is a base value annotated with extra information about that value. The annotation is an association of layer names with their values. For example, the number 2 may be the base value in many data items: if we are dealing in potatoes there may be a 2 dollar price tag on a 2-pound bag of potatoes. Each of these instances of the number 2 must be a distinct data item, with different values (dollars or pounds) for the units layer. There may be other layers as well: the 2-dollar price may have information saying how it was derived from the price paid to the farmer and the cost of transportation and processing. + +To address this issue we introduce the *layered datum*. A layered datum is represented as a bundle that contains an association of layers and their values. So a 2-pound quantity of potatoes and a 2 dollar price for potatoes will be separate layered data items: + +``` +(define (make-layered-datum base-value alist) + (if (null? alist) + base-value + (let ((alist + (cons (cons base-layer base-value) + alist))) + (define (has-layer? layer) + (and (assv layer alist) #t)) + (define (get-layer-value layer) + (cdr (assv layer alist))) + (define (annotation-layers) + (map car (cdr alist))) + (bundle layered-datum? + has-layer? get-layer-value + annotation-layers)))) +``` + +The associations between layers and their values are represented as an *association list*, or *alist*—a list of key–value pairs. + +For convenience, we provide layered-datum, which takes its layer arguments in *property-list* form (alternating layer and value, as in the examples on page 300) and calls make-layered-datum with the corresponding alist. + +``` +(define (layered-datum base-value . plist) + (make-layered-datum base-value (plist->alist plist))) +``` + +This design provides great flexibility. There may be many different kinds of layered data, and for each there is no a priori commitment to any particular layer or number of layers. The only common feature is that each layered datum has a distinguished layer, the base-layer, which contains the object that all the other layer values are annotations on. + +Each layer is represented by a bundle that embodies the specifics of that layer. The simplest is the base layer: + +``` +(define base-layer + (let () + (define (get-name) 'base) + (define (has-value? object) #t) + (define (get-value object) + (if (layered-datum? object) + (object 'get-layer-value base-layer) + object)) + (bundle layer? get-name has-value? get-value))) +``` + +This shows the primary operation of a layer: the get-value operation that fetches the layer value, if present, or returns a default. In the case of the base layer, the default is the object itself. + +The *annotation layers* have a little more complexity. In addition to the above, they also manage a set of named procedures that will be explored when we look at layered procedures. The makeannotation-layer procedure provides the common infrastructure used by all annotation layers; it calls its constructor argument to supply the layer-specific parts. + +``` +(define (make-annotation-layer name constructor) + (define (get-name) name) + (define (has-value? object) + (and (layered-datum? object) +``` + +``` +(object 'has-layer? layer))) + (define (get-value object) + (if (has-value? object) + (object 'get-layer-value layer) + (layer 'get-default-value))) + (define layer + (constructor get-name has-value? get-value)) +layer) +``` + +We use make-annotation-layer to construct the units layer: + +``` +(define unit-layer + (make-annotation-layer 'unit + (lambda (get-name has-value? get-value) + (define (get-default-value) + unit:none) + (define (get-procedure name arity) + See definition on page 308.) + (bundle layer? + get-name has-value? get-value + get-default-value get-procedure)))) +``` + +This implementation shows the rest of the layer structure: a provider for the default value, and the procedure get-procedure that implements this layer's support for layered procedures, which we will examine in the next section (page 308). + +As a convenience for a common use case, layer-accessor creates an accessor procedure that is equivalent to calling a layer's get-value delegate: + +``` +(define (layer-accessor layer) + (lambda (object) + (layer 'get-value object))) +(define base-layer-value + (layer-accessor base-layer)) +``` + +#### **6.2.2 Layered procedures** + +Procedures are also data that can be layered. A layered procedure is similar to a generic procedure, in which there are handlers for different argument types. A layered procedure instead provides implementations for separate layers in the incoming data, and + +processes all of them to produce a layered result. [1](#page-30-0) For example, when combining a numeric layer with a units layer, the procedure can process the numeric parts of the arguments using its numeric layer, and also process the units parts of the arguments using its units layer. + +In the numerical example shown in section 6.1, the code F for Newton's force represents the *parti*, the essential plan for the computation to be performed. It operates on numbers; the units annotate the numbers. The layered generic procedures that implement the arithmetic operators, such as multiplication, have a base component that operates on the numbers in the base layer and they have other components, one for each layer that might annotate the numerical base layer. The units layer is an annotation layer that gives more information about the data and the computation, but is not essential to the computation. + +In a layered system the base layer must be able to compute without reference to the other layers. But the annotation layers may need access to the values that are in the base layer. If an annotation layer of an argument is missing, the procedure's annotation layer may use a default value or simply not run. In any case, the base layer always runs. + +To construct a layered procedure, we need a unique name and arity for the procedure, and a base-procedure to implement the base computation: + +``` +(define (make-layered-procedure name arity base-procedure) + (let* ((metadata + (make-layered-metadata name arity base-procedure)) + (procedure + (layered-procedure-dispatcher metadata))) + (set-layered-procedure-metadata! procedure metadata) + procedure)) +``` + +Information about the layered procedure is kept in metadata for that procedure. The metadata also manages the handlers for the base layer and the annotation layers. + +The metadata for a layered procedure is implemented as a bundle. It is created with the name of the layered procedure, its + +arity, and the base-procedure (the handler for the base layer). The metadata provides access to each of these. It also provides sethandler! for assigning a handler for an annotation layer and gethandler for retrieving the handler for an annotation layer. + +Each annotation layer, for example the unit-layer, provides get-procedure that when given a procedure name and arity returns the appropriate handler for that procedure name and arity for that layer. The get-handler provided by the layered metadata first checks if it has a handler for that layer. If so it returns that handler; otherwise it returns the result of the layer's getprocedure. + +``` +(define (make-layered-metadata name arity base-procedure) + (let ((handlers (make-weak-alist-store eqv?))) + (define (get-name) name) (define (get-arity) arity) + (define (get-base-procedure) base-procedure) + (define has? (handlers 'has?)) + (define get (handlers 'get)) + (define set-handler! (handlers 'put!)) + (define (get-handler layer) + (if (has? layer) + (get layer) + (layer 'get-procedure name arity))) + (bundle layered-metadata? + get-name get-arity get-base-procedure + get-handler set-handler!))) +``` + +The actual work of applying a layered procedure is done by layered-procedure-dispatcher. The dispatcher must be able to access and apply the base procedure and the annotation layer procedures that are associated with the layered procedure. All of this information is provided by the metadata. + +``` +(define (layered-procedure-dispatcher metadata) + (let ((base-procedure (metadata 'get-base-procedure))) + (define (the-layered-procedure . args) + (let ((base-value + (apply base-procedure + (map base-layer-value args))) + (annotation-layers + (apply lset-union eqv? + (map (lambda (arg) + (if (layered-datum? arg) +``` + +``` +(arg 'annotation-layers) + '())) + args)))) + (make-layered-datum base-value + (filter-map ; drops #f values + (lambda (layer) + (let ((handler (metadata 'get-handler layer))) + (and handler + (cons layer + (apply handler base-value args))))) + annotation-layers)))) +the-layered-procedure)) +``` + +When called, a layered procedure first calls base-procedure on the base-layer values of the arguments to get the base value. It also determines which annotation layers are applicable by examining each of the arguments; if there are no annotation layers that have handlers, then the result is just the base-layer value, because makelayered-datum (on page 303), will return the unannotated base value. Otherwise, each applicable layer's handler is called to produce a value for that layer. The layer-specific handler is given access to the computed base-value and the arguments to the layered procedure; it does not need any layer values other than its own and those of the base layer. Generally, the result is a layered datum containing the base value and the values of the applicable annotation layer handlers. + +To see how this works in practice, let's look at the implementation for the units layer (on page 304). The getprocedure handler of the units layer (below) looks up the layerspecific procedure by name if the layered procedure's name is an arithmetic operator, and then calls the layer-specific procedure with the units from each argument. (There is a special exception for expt, whose second argument is not decorated with units—it is a number.) For other procedures, the units handling is undefined, so get-procedure returns #f to indicate that. + +``` +(define (get-procedure name arity) + (if (operator? name) + (let ((procedure (unit-procedure name))) + (case name +``` + +``` +((expt) + (lambda (base-value base power) + (procedure (get-value base) + (base-layer-value power)))) + (else + (lambda (base-value . args) + (apply procedure (map get-value args)))))) +#f)) +``` + +Notice that because get-procedure is an internal procedure of unit-layer, it has access to the units layer get-value inherited from make-annotation-layer (on page 304). We will see unitprocedure when we talk about the units implementation in section 6.3.1. + +Let's look at an example. Consider the simple procedure square that squares its argument. + +``` +(define (square x) (* x x)) +``` + +We make a layered version of our square procedure, giving the numerical version to the base layer. + +``` +(define layered-square + (make-layered-procedure 'square 1 square)) +``` + +This layered squaring procedure behaves the same as the base version: + +``` +(layered-square 4) +16 +(layered-square 'm) +(* m m) +``` + +However, if we provide an argument with a units layer, both the base layer and units layer will be processed separately and combined in the output: + +``` +(pp (layered-square + (layered-datum 'm + unit-layer (unit 'kilogram 1)))) +#[layered-datum (* m m)] +``` + +``` +(base-layer (* m m)) +(unit-layer (unit kilogram 2)) +``` + +### **6.3 Layered arithmetic** + +Now that we know how to make layered procedures, we can add layers to an arithmetic. All that is required is to build an arithmetic with a layered procedure for each operation supplied in the base arithmetic. We start with a pleasant arithmetic + +``` +(define (generic-symbolic) + (let ((g (make-generic-arithmetic + make-simple-dispatch-store))) + (add-to-generic-arithmetic! g numeric-arithmetic) + (extend-generic-arithmetic! g function-extender) + (extend-generic-arithmetic! g symbolic-extender) + g)) +``` + +and build an extender to handle the layers on that substrate: + +``` +(define generic-with-layers + (let ((g (generic-symbolic))) + (extend-generic-arithmetic! g layered-extender) + g)) +``` + +The layered extender has to do a bit of work. It makes a layered extension arithmetic that operates on layered data. The domain predicate of the layered extension arithmetic is layered-datum?. The base predicate for the layered operations is just the domain predicate of the underlying arithmetic, with the extra provision that it must reject layered data items. [2](#page-30-1) The constants are the base constants, and for each arithmetic operator the operation is a layered procedure applicable if any argument is layered, with the base procedure inherited from the underlying arithmetic. + +``` +(define (layered-extender base-arith) + (let ((base-pred + (conjoin (arithmetic-domain-predicate base-arith) + (complement layered-datum?)))) + (make-arithmetic (list 'layered +``` + +``` +(arithmetic-name base-arith)) + layered-datum? + (list base-arith) +(lambda (name base-value) + base-value) +(lambda (operator base-operation) + (make-operation operator + (any-arg (operator-arity operator) + layered-datum? + base-pred) + (make-layered-procedure operator + (operator-arity operator) + (operation-procedure base-operation))))))) +``` + +Nearly all of this is boilerplate, including leaving the constant objects alone and requiring that at least one argument to an operation be layered. The only interesting part is the final three lines, in which the base arithmetic's operation procedure is wrapped in a layered procedure. The operator is used as the name of the layered procedure, so that each layer can provide special handling should that operation need it. + +#### **6.3.1 Unit arithmetic** + +We need an arithmetic of units for the units annotation layer on an arithmetic. A unit specification has named base units, and an exponent for each base unit. [3](#page-30-2) In the units arithmetic, the product of unit specifications is a new unit specification where the exponent of each base unit is the sum of the exponents of the corresponding base units in the arguments. + +``` +(unit:* (unit 'kilogram 1 'meter 1 'second -1) + (unit 'second -1)) +(unit kilogram 1 meter 1 second -2) +``` + +Here we assume that the base units are just named by symbols, such as kilogram. + +#### **Representation of unit specifications** + +To make it easy to create a unit specification, we represent it externally as a property list (with alternating keys and values) of base unit names and exponents. + +But internally, it is convenient to represent a unit specification as a tagged alist; so we must convert a raw property list to the alist representation, using plist->alist. We keep the alists sorted by the base unit name. In this conversion we do some error checking. The argument list to unit must be in the form of a property list. The exponent associated with each base unit name must be an exact rational number (usually an integer). It is an error if a named base unit is duplicated. The sort by base unit names will signal an error if the base unit name is not a symbol. + +``` +(define (unit . plist) + (guarantee plist? plist 'unit) + (let ((alist + (sort (plist->alist plist) + (lambda (p1 p2) + (symbolunit alist))) +(define (sorted-alist-repeated-key? alist) + (and (pair? alist) + (pair? (cdr alist)) + (or (eq? (caar alist) (caadr alist)) + (sorted-alist-repeated-key? (cdr alist))))) +``` + +The procedure alist->unit just attaches a unique tag to an alist; and unit->alist extracts the alist from a unit specification: + +``` +(define (alist->unit alist) + (cons %unit-tag alist)) +(define (unit->alist unit) + (guarantee unit? unit 'unit->alist) + (cdr unit)) +``` + +Here, the value of %unit-tag is just a unique symbol that we use to head a unit specification alist. To make the printed output of unit specifications look like the property lists that we give to unit to make a unit specification, we arrange that the Scheme printer prints unit specifications in property list form. This magic arrangement (not shown here) is triggered by the unit-tag symbol at the head of the list. + +The predicate unit? is true if its argument is a legitimate unit specification: + +``` +(define (unit? object) + (and (pair? object) + (eq? (car object) %unit-tag) + (list? (cdr object)) + (every (lambda (elt) + (and (pair? elt) + (symbol? (car elt)) + (exact-rational? (cdr elt)))) + (cdr object)))) +``` + +### **Unit arithmetic operations** + +We construct the unit arithmetic as a mapping between the operator name and the operation that implements the required behavior. Pure numbers, like *π*, are unitless. When a quantity with units is multiplied by a unitless number, the result is the units of the quantity with units. So the unit arithmetic needs a multiplicative identity for unitless numbers—this is unit:none. The procedure simple-operation combines the operator, the test for applicability, and the procedure that implements the operation: + +``` +(define (unit-arithmetic) + (make-arithmetic 'unit unit? '() + (lambda (name) + (if (eq? name 'multiplicative-identity) + unit:none + (default-object))) + (lambda (operator) + (simple-operation operator + unit? + (unit-procedure operator))))) +``` + +We call unit-procedure to get the appropriate procedure for each operator: + +``` +(define (unit-procedure operator) + (case operator + ((*) unit:*) + ((/) unit:/) + ((remainder) unit:remainder) + ((expt) unit:expt) + ((invert) unit:invert) + ((square) unit:square) + ((sqrt) unit:sqrt) + ((atan) unit:atan) + ((abs ceiling floor negate round truncate) + unit:simple-unary-operation) + ((+ - max min) + unit:simple-binary-operation) + ((acos asin cos exp log sin tan) + unit:unitless-operation) + ((angle imag-part magnitude make-polar make-rectangular + real-part) + ;; first approximation: + unit:unitless-operation) + (else + (if (eq? 'boolean (operator-codomain operator)) + (if (n:= 1 (operator-arity operator)) + unit:unary-comparison + unit:binary-comparison) + unit:unitless-operation)))) +``` + +For each case above we must provide the appropriate operation. For example, to multiply two unit quantities we must add corresponding exponents and elide any base unit that has zero exponent: + +``` +(define (unit:* u1 u2) + (alist->unit + (let loop ((u1 (unit->alist u1)) (u2 (unit->alist u2))) + (if (and (pair? u1) (pair? u2)) + (let ((factor1 (car u1)) (factor2 (car u2))) + (if (eq? (car factor1) (car factor2)) ; same unit + (let ((n (n:+ (cdr factor1) (cdr factor2)))) + (if (n:= 0 n) + (loop (cdr u1) (cdr u2)) + (cons (cons (car factor1) n) + (loop (cdr u1) (cdr u2))))) +``` + +``` +(if (symbol1 +- farad = coulomb*·*volt *−*1 +- weber = volt*·*second +- henry = weber*·*ampere *−*1 +- hertz = second *−*1 +- tesla = weber*·*meter *−*2 +- pascal = newton*·*meter *−*2 + - **a.** Make a procedure that takes a unit description in terms of SI base units and, if possible, makes a simpler description using derived units. + - **b.** The expression of a unit description in terms of the derived units is not unique—there may be many such equivalent descriptions. This is similar to a problem of algebraic simplification, but the criterion of "simpler" is not obvious. Make a nice version that you like and explain why you like it. + - **c.** It is nice to be able to use the standard abbreviations and multipliers for the units. For example, 1 mA is the nice way to write 0*.*001 A or 1*/*1000 ampere. Design and implement a simple extensible system that allows the use of these notational conveniences for both input and output. But remember that "syntactic sugar causes cancer of the semicolon." + +### **6.4 Annotating values with dependencies** + +One kind of annotation that a programmer may want to deploy in some parts of a program is the tracking of dependencies. Every piece of data (or procedure) came from somewhere. Either it entered the computation as a premise that can be labeled with its external provenance, or it was created by combining other data. We can provide primitive operations of the system with annotation layers that, when processing data with justifications, can annotate the results with appropriate justifications. + +Justifications can be at differing levels of detail. The simplest kind of justification is just a set of those premises that contributed to the new data. A procedure such as addition can form a sum with a justification that is just the union of the premises of the justifications of the addends that were supplied. Multiplication is similar, but a zero multiplicand is sufficient to force the product to be zero, so the justifications of the other factors do not need to be included in the justification of the zero product. + +Such simple justifications can be computed and carried without much more than a constant overhead, but they can be invaluable in debugging complex processes and in the attribution of credit or blame for outcomes of computations. Just this much is sufficient to support dependency-directed backtracking. (See section 7.5.) + +Externally supplied data can be annotated with a *premise* that identifies its origin. More generally, any data value can be annotated with a set of premises, which is called its *support set*. The support set annotating a datum is usually referred to as its *support*. When a support-aware procedure is applied to multiple arguments, it must combine the support sets of the arguments to represent the support of the result. + +Managing support sets is a straightforward application of our layered data mechanism. We add a support layer to our generic arithmetic to handle support sets. It coexists with other layers, such as the units layer. So this is an additive feature. + +On page 309 we built an arithmetic that supports layered data and procedures: + +``` +(define generic-with-layers + (let ((g (generic-symbolic))) + (extend-generic-arithmetic! g layered-extender) + g)) +(install-arithmetic! generic-with-layers) +``` + +We don't need to specify what layers are to be supported by layered-extender, since it automatically uses the layers in each layered procedure's arguments. So if, say, + is called with arguments that have units, then the result will also have units. But if none of the arguments have units, then neither does the result, and the unit addition procedure is not invoked. Similarly, if the arguments have support, then the result will have support. But if the arguments do not have support, the result will not have support, and the support addition procedure is not invoked. + +For example, we can define the kinetic energy of a particle with mass m and velocity v: + +``` +(define (KE m v) + (* 1/2 m (square v))) +``` + +Now we can see the result of evaluating the kinetic energy on some arguments: + +``` +(pp (KE (layered-datum 'm + unit-layer (unit 'kilogram 1) + support-layer (support-set 'cph)) + (layered-datum 'v + unit-layer (unit 'meter 1 'second -1) + support-layer (support-set 'gjs)))) +#[layered-datum (* (* 1/2 m) (square v))] +(base-layer (* (* 1/2 m) (square v))) +(unit-layer (unit kilogram 1 meter 2 second -2)) +(support-layer (support-set gjs cph)) +``` + +We supply each argument with annotations for the units layer and the support layer. For the support layer we give a set of premises (the support set). Here, each argument is supported by a single + +premise, cph and gjs respectively. The value is a layered object with three layers: the base generic arithmetic layer value is the appropriate algebraic expression; the units are correct; and the support set is the set of named premises that contributed to the value. + +Here we accepted the definition of KE without supplying explicit support for that procedure. More generally, we might want to add such support. For example, we may want to say that KE is supported by a premise KineticEnergy-classical. Then if we find a result of some complex computation that seems wrong, we can find out which procedures contributed to the wrong answer, as well as the numerical or symbolic input values that were used. We will attack this problem in exercise 6.2. + +Not all premises that appear in the arguments to a computation need to appear in a result. For example, if a factor contributing to a product is zero, that is sufficient reason for the product to be zero, independent of any other finite factors. This is illustrated by supplying a zero mass: + +``` +(pp (KE (layered-datum 0 + unit-layer (unit 'kilogram 1) support- +layer + (support-set 'jems)) + (layered-datum 'v + unit-layer (unit 'meter 1 'second -1) + support-layer (support-set 'gjs)))) +#[layered-datum 0] +(base-layer 0) +(unit-layer (unit kilogram 1 meter 2 second -2)) +(support-layer (support-set jems)) +``` + +Here the support for the numeric value of the result being zero is just the support supplied for the zero value for the mass. + +#### **6.4.1 The support layer** + +Now we will see how the support layer is implemented. It is somewhat different from the units layer, because units can be + +combined without any reference to the base layer, whereas the support layer needs to look at the base layer for some operations. + +The support layer is somewhat simpler than the units layer, because all but three of the arithmetic operators use the default: the support set of the result is the union of the support sets of the arguments. + +``` +(define support-layer + (make-annotation-layer 'support + (lambda (get-name has-value? get-value) + (define (get-default-value) + (support-set)) + (define (get-procedure name arity) + (case name + ((*) support:*) + ((/) support:/) + ((atan2) support:atan2) + (else support:default-procedure))) + (bundle layer? + get-name has-value? get-value + get-default-value get-procedure)))) +(define support-layer-value + (layer-accessor support-layer)) +(define (support:default-procedure base-value . args) + (apply support-set-union (map support-layer-value args))) +``` + +Multiplication is the first interesting case. The support layer needs to look at the values of the base arithmetic arguments to determine the computation of support. If either argument is zero, then the support for the result is only the support for the zero argument. + +``` +(define (support:* base-value arg1 arg2) + (let ((v1 (base-layer-value arg1)) + (v2 (base-layer-value arg2)) + (s1 (support-layer-value arg1)) + (s2 (support-layer-value arg2))) + (if (exact-zero? v1) + (if (exact-zero? v2) + (if (< (length (support-set-elements s1)) + (length (support-set-elements s2))) + s1 +``` + +``` +s2) ;arbitrary + s1) +(if (exact-zero? v2) + s2 + (support-set-union s1 s2))))) +``` + +Division (and arctangent, not shown) also has to examine the base layer to deal with zero arguments. If the dividend is zero, that is sufficient to support the result that the quotient is zero. The divisor won't ever be zero because the base-layer computation will have signaled an error and this code won't be run. + +``` +(define (support:/ base-value arg1 arg2) + (let ((v1 (base-layer-value arg1)) + (s1 (support-layer-value arg1)) + (s2 (support-layer-value arg2))) + (if (exact-zero? v1) + s1 + (support-set-union s1 s2)))) +``` + +These optimizations for \* and / make sense only when we can prove that an argument is really zero, not an unsimplified symbolic expression. (But if an expression simplifies to exact zero we can use that fact!) + +``` +(define (exact-zero? x) + (and (n:number? x) (exact? x) (n:zero? x))) +``` + +The support-set abstraction is implemented as a list starting with the symbol support-set + +``` +(define (%make-support-set elements) + (cons 'support-set elements)) +(define (support-set? object) + (and (pair? object) + (eq? 'support-set (car object)) + (list? (cdr object)))) +(define (support-set-elements support-set) + (cdr support-set)) +``` + +along with a few extra utilities to complete the abstraction. + +``` +(define (make-support-set elements) + (if (null? elements) + %empty-support-set + (%make-support-set (delete-duplicates elements)))) +(define (support-set . elements) + (if (null? elements) + %empty-support-set + (%make-support-set (delete-duplicates elements)))) +(define %empty-support-set + (%make-support-set '())) +(define (support-set-empty? s) + (null? (support-set-elements s))) +``` + +We need to be able to compute the union of support sets and adjoin new elements to them. Since we chose to keep our elements in a list, we can use the lset library from Scheme. [4](#page-30-3) + +``` +(define (support-set-union . sets) + (make-support-set + (apply lset-union eqv? + (map support-set-elements sets)))) +(define (support-set-adjoin set . elts) + (make-support-set + (apply lset-adjoin eqv? (support-set-elements set) elts))) +``` + +### **Exercise 6.2: Procedural responsibility** + +The support layer based on arithmetic is extremely low level. Every primitive arithmetic operation is support-aware, and there is no way to bypass that work for common conditions. There needs to be a means of abstraction. For example, suppose we have a procedure that computes the numerical definite integral of a function. The units of the numerical value of the integral is the product of the units of the numerical value of the integrand and the units of the numerical value of the limits of integration. (The units of the upper and lower limit must be the same!) However, it is not a good idea to carry the units computation through all of the detailed arithmetic + +going on in the integration process. It should be possible to annotate the integrator so that the result has the correct units without requiring every internal addition and multiplication to be a layered procedure operating on layered data. + +- **a.** Make it possible to allow compound procedures that may be built out of the primitive arithmetic procedures (or possibly not) to modify the support of their results by adding a premise (such as "made by George"). +- **b.** Allow compound procedures to be executed in a way that hides their bodies from the support layer. Thus, for example, a trusted library procedure may annotate its result with appropriate support, but the operations in its body will not incur the overhead of computing the support of intermediate results. +- **c.** The support layer is organized around the operators of an arithmetic system. But sometimes it is useful to distinguish the specific occurrences of an operator. For example, when dealing with numerical precision it is not very helpful to say that a loss of significance is due to subtraction of almost equal quantities. It would be more helpful to show the particular instance of subtraction that is the culprit. Is there some way to add the ability to identify instances of an operator to the support layer? + +# **Exercise 6.3: Paranoid programming** + +Sometimes we are not confident that a library procedure does what we expect. In that case it is prudent to "wrap" the library procedure with a test that checks its result. For example, we may be using a program solve that takes as inputs a set of equations and a set of unknowns, that may occur in the equations, producing a set of substitutions for the unknowns that satisfy the equations. We might want to wrap the solve program with a wrapper that checks that the result of substituting the outputs into the input equations indeed makes them tautologies. But we don't want such a paranoia + +wrapper to appear as part of our *parti*. How can this sort of thing be implemented as a layer? Explain your design and implement it. + +### **Exercise 6.4: IDE for layered programs** + +This exercise is a major design project: the invention of and development of an IDE (Integrated Development Environment) for layered systems. + +The idea of layered programs, using layered data and layered procedures, is a very nice idea. The goal is to be able to annotate programs with useful and executable metadata—such as type declarations, assertions, units, and support—without cluttering the text of the base program. However, the text of the program must be linked with the text of the annotations, so that as any part of the program is edited, the related layers are also edited. For example, suppose it is necessary to edit the base procedure of some layered procedure. The layers may be information like type declarations or how it handles units and support sets. It would be nice for the editor to show us these layers and how they are connected to the text of the base program, when necessary. Perhaps edits to the text of the base program entail edits to the annotation layers. Sometimes this can be done automatically, but often the programmer must edit the layers. + +- **a.** Imagine what you would like to see in an IDE to support the development of layered systems. What would you like to see on a screen? How would you keep the parts that are edited synchronized? +- **b.** Emacs is a powerful infrastructure for building such an IDE. It supports multiple windows and per-window editing modes. It has syntactic support for many computer languages, including Scheme. There are Emacs subsystems, like org-mode, that have the flavor of a layered structure for documents. Can this be extended to help with layered programming? Sketch out a way to build your IDE using Emacs. + +- **c.** Build a small but extensible prototype on the Emacs base, and try it out. What problems do you encounter? Did Emacs really provide a good place to start? If not, why not? Report on your experiment. +- **d.** If your prototype was promising, develop a solid system and make it into a loadable Emacs library, so we can all use your great system. + +#### **6.4.2 Carrying justifications** + +More complex justifications may also record the particular operations that were used to make the data. This kind of annotation can be used to provide explanations (proofs), but it is intrinsically expensive in space—potentially linear in the number of operations performed. However, sometimes it is appropriate to attach a detailed audit history describing the derivation of a data item, to allow some later process to use the derivation for some purpose or to evaluate the validity of the derivation for debugging. [5](#page-30-4) + +For many purposes, such as legal arguments, it is necessary to know the provenance of data: where it was collected, how it was collected, who collected it, how the collection was authorized, etc. The detailed derivation of a piece of evidence, giving the provenance of each contribution, may be essential to determining if it is admissable in a trial. + +The symbolic arithmetic that we built in section 3.1 is one way this can be done. In fact, if symbolic arithmetic is used as a layer on numeric arithmetic, then every numerical value is annotated with its derivation. The symbolic arithmetic annotation could be very expensive, because the symbolic expression for an application of a numerical operator includes the symbolic expressions of its inputs. However, because we need only include a pointer to each input, the space and time cost of annotating each operation is often acceptable. [6](#page-30-5) So one may overlay this kind of justification when it is necessary to provide an explanation, or even temporarily, to track a difficult-to-catch bug. + +### **Exercise 6.5: Justifications** + +Sketch out the issues involved in carrying justifications for data. Notice that the reason for a value depends on the values that it was derived from and the way those values were combined. What do we do if the reason for a value is some numerically weighted combination of many factors, as in a deep neural network? This is a research question that we need to address to make the systems that affect us accountable. + +# **6.5 The promise of layering** + +We have only scratched the surface of what can be done with an easy and convenient mechanism for layering of data and programs. It is an open area of research. The development of systems to support such layering can have huge consequence for the future. + +Sensitivity analysis is an important feature that can be built using annotated data and layered procedures. For example, in mechanics, if we have a system that evolves the solution of a system of differential equations from some initial conditions, it is often valuable to understand the way a tube of trajectories that surround a reference trajectory deforms. This is usually accomplished by integrating a variational system along with the reference trajectory. Similarly, it may be possible to carry a probability distribution of values around a nominal value along with the nominal value computed in some analyses. This may be accomplished by annotating the values with distributions and providing the operations with overlaying procedures to combine the distributions, guided by the nominals, perhaps implementing Bayesian analysis. Of course, to do this well is not easy. + +An even more exciting but related idea is that of perturbational programming. By analogy with the differential equations example, can we program symbolic systems to carry a "tube" of variations + +around a reference trajectory, thus allowing us to consider small variations of a query? Consider, for example, the problem of doing a search. Given a set of keywords, the system does some magic that comes up with a list of documents that match the keywords. Suppose we incrementally change a single keyword. How sensitive is the search to that keyword? More important, is it possible to reuse some of the work that was done getting the previous result in the incrementally different search? We don't know the answers to these questions, but if it is possible, we want to be able to capture the methods by a kind of perturbational program, built as an overlay on the base program. + +#### **Dependencies mitigate inconsistency** + +Dependency annotations on data give us a powerful tool for organizing human-like computations. For example, all humans harbor mutually inconsistent beliefs: an intelligent person may be committed to the scientific method yet have a strong attachment to some superstitious or ritual practices; a person may have a strong belief in the sanctity of all human life, yet also believe that capital punishment is sometimes justified. If we were really logicians this kind of inconsistency would be fatal: if we really were to simultaneously believe both propositions P and NOT P, then we would have to believe all propositions! But somehow we manage to keep inconsistent beliefs from inhibiting all useful thought. Our personal belief systems appear to be locally consistent, in that there are no contradictions apparent. If we observe inconsistencies we do not crash; we may feel conflicted or we may chuckle. + +We can attach to each proposition a set of supporting assumptions, allowing deductions to be conditional on the assumption set. Then, if a contradiction occurs, a process can determine the particular "nogood set" of inconsistent assumptions. The system can then "chuckle," realizing that no deductions based on any superset of those assumptions can be believed. This chuckling process, dependency-directed backtracking, can be used to optimize a complex search process, allowing a search to make the + +best use of its mistakes. But enabling a process to simultaneously hold beliefs based on mutually inconsistent sets of assumptions without logical disaster is revolutionary. + +#### **Restrictions on the use of data** + +Data is often encumbered by restrictions on the ways it may be used. These encumberances may be determined by statute, by contract, by custom, or by common decency. Some of these restrictions are intended to control the diffusion of the data, while others are intended to delimit the consequences of actions predicated on that data. + +The allowable uses of data may be further restricted by the sender: "I am telling you this information in confidence. You may not use it to compete with me, and you may not give it to any of my competitors." Data may also be restricted by the receiver: "I don't want to know anything about this that I may not tell my spouse." + +Although the details may be quite involved, as data is passed from one individual or organization to another, the restrictions on the uses to which it may be put are changed in ways that can often be formulated as algebraic expressions. These expressions describe how the restrictions on the use of a particular data item may be computed from the history of its transmission: the encumberances that are added or deleted at each step. When parts of one data set are combined with parts of another data set, the restrictions on the ways that the extracts may be used and the restrictions on the ways that they may be combined must determine the restrictions on the combination. A formalization of this process is a *data-purpose algebra* [53] description. + +Data-purpose algebra layers can be helpful in building systems that track the distribution and use of sensitive data to enable auditing and to inhibit the misuse of that data. But this kind of application is much larger than just a simple matter of layering. To make it effective requires ways of ensuring the security of the process, to prevent leakage through uncontrolled channels or + +compromise of the tracking layers. There is a great deal of research to be done here. + +- [1](#page-7-0) Note that a layer's implementation for a layered procedure may itself be a generic procedure. Likewise, a handler for a generic procedure may be a layered procedure. +- [2](#page-11-0) The procedures conjoin and complement are combinators for predicates: conjoin makes a new predicate that is the boolean and of its arguments, and complement makes a new predicate that is the negation of its argument. +- [3](#page-12-0) Watch out! The "base units" are not to be confused with the base-layer in our layered-data system. A system of units is built on a set of base units, such as kilograms, meters, and seconds. There are derived units, such as the newton, which is a combination of the base units: 1 N = 1 kg *·* m *·* s −2 +- [4](#page-23-0) If the support sets get large we can try to represent them much more efficiently, but here we are dealing with only small sets. +- [5](#page-26-0) In Patrick Suppes's beautiful *Introduction to Logic* [118] the proofs are written in four columns. The columns are an identifier for the line, the statement for that line, the rule that was used for deriving that line from previous lines, and the set of premises that support the line. This proof structure is actually the inspiration for the way we carry justifications and support sets. +- [6](#page-26-1) This is not really true. The problem is that the composition of numerical operations may incur no significant memory access cost, but the construction of a symbolic expression, however small, requires access to memory. And memory access time is huge compared with the time to do arithmetic in CPU registers. Sigh... \ No newline at end of file diff --git a/raw/book/설계원칙-394-446.md b/raw/book/설계원칙-394-446.md new file mode 100644 index 0000000..e225bf6 --- /dev/null +++ b/raw/book/설계원칙-394-446.md @@ -0,0 +1,1259 @@ +# **Propagation** + +Decades of programming experience have taken a toll on our collective imagination. We come from a culture of scarcity, where computation and memory were expensive, and concurrency was difficult to arrange and control. This is no longer true. But our languages, our algorithms, and our architectural ideas are based on those assumptions. Our languages are basically sequential and directional—even functional languages assume that computation is organized around values percolating up through expression trees. Multidirectional constraints are hard to express in functional languages. + +### **Escaping the Von Neumann straitjacket** + +The propagator model of computation [99] provides one avenue of escape. The propagator model is built on the idea that the basic computational elements are propagators, autonomous independent machines interconnected by shared cells through which they communicate. Each propagator machine continuously examines the cells it is connected to, and adds information to some cells based on computations it can make from information it can get from others. Cells accumulate information and propagators produce information. + +Since the propagator infrastructure is based on propagation of data through interconnected independent machines, propagator structures are better expressed as wiring diagrams than as expression trees. In such a system partial results are useful, even though they are not complete. For example, the usual way to + +compute a square root is by successive refinement using Heron's method. In traditional programming, the result of a square root computation is not available to subsequent computations until the required error tolerance is achieved. By contrast, in an analog electrical circuit that performed the same function, the partial results could be used by the next stages as first approximations to their computations. This is not an analog/digital problem—it is organizational. In a propagator mechanism the partial results of a digital process can be made available without waiting for the final result. + +#### **Filling in details** + +This makes a natural computational structure for building powerful systems that fill in details. The structure is additive: new ways to contribute information can be included just by adding new parts to a network, whether simple propagators or entire subnetworks. For example, if an uncertain quantity is represented as a range, a new way of computing an upper bound can be included without disturbing any other part of the network. + +Filling in details plays an important role in all ways we use information. Consider Kanizsa's triangle ([figure](#page-2-0) 7.1), for example. Given a few fragmentary pieces of evidence we see a white triangle (on a white background!) that isn't there (and that is typically described as brighter than the background). We have filled in the missing details of an implied figure. When we hear speech we fill in the details from the observed context, using the regularities of phonology, morphology, syntax, and semantics. An expert electrical circuit designer who sees a partial schematic diagram fills in details that make a sensible mechanism. This filling in of details is not sequential; it happens opportunistically wherever local deductions can be made from surrounding clues. Deductions may compound, so that if a piece is filled in it forms a new clue for the continuing completion process. + +![](설계원칙-394-446_images/_page_2_Picture_0.jpeg) + +**[Figure](#page-1-0) 7.1** Kanizsa's triangle is a classic example of a completion illusion. The white triangle is not there! + +#### **Dependencies and backtracking** + +Using layering, we incorporate dependencies into the propagator infrastructure in a natural and efficient way. This allows the system to track and preserve information about the provenance of each value. Provenance can be used to provide a coherent explanation of how a value was derived, citing the sources and the rules by which the source material was combined. This is especially important when we have multiple sources, each providing partial information about a value. Dependency tracking also provides a substrate for debugging (and possibly for introspective self-debugging). + +Besides foundation beliefs, hypotheticals may be introduced by amb machines, which provide alternative values supported by premises that may be discarded without pain. Unlike systems modeled on expression-based languages such as Lisp, there is no spurious control flow arising from the expression structure to pollute our dependencies and force expensive recomputation of already-computed values when backtracking. + +# **Degeneracy, redundancy, and parallelism** + +The propagator model incorporates mechanisms to support the integration of redundant (actually degenerate) subsystems so that a problem can be addressed in multiple disparate ways. Multiply redundant designs can be effective in combating attacks: if there is no single thread of execution that can be subverted, an attack that disables or delays one of the paths will not impede the computation, because an alternate path can substitute. Redundant and degenerate parallel computations contribute to integrity and resiliency: computations that proceed along variant paths can be checked to assure integrity. The work of subverting parallel computations increases because of the cross-thread invariants. + +The propagator model is essentially concurrent, distributed, and scalable, with strong isolation and a built-in assumption of parallel computation. Multiple independent propagators are computing and contributing to the information in the shared cells, where the information is merged and contradictions are noted and acted upon. + +# **7.1 An example: Distances to stars** + +Consider a problem of astronomy, the estimation of the distance to stars. This is very hard, because the distances are enormous. Even for the closest stars, for which we can use parallax measurements, with the radius of the Earth's orbit as a baseline, the angular variation of the position of a star is a small part of an arcsecond. Indeed, the unit of distance for stellar distances is the *parsec*, which is the altitude of a triangle based on the diameter of the Earth's orbit, where the vertex angle is 2 arcseconds. The parallax is measured by observing the variation of position of the star against the background as the Earth revolves annually around the Sun. (See [figure](#page-4-0) 7.2.) + +![](설계원칙-394-446_images/_page_4_Figure_0.jpeg) + +**[Figure](#page-3-0) 7.2** The angle *θ* of the triangle to the distant star erected on the semimajor axis of the Earth's orbit around the Sun is called the parallax of the star. Note that *A/d* = tan(*θ*). If *θ* = 1 arcsecond then the distance *d* is defined to be 1 parsec. The length of the semimajor axis *A* is 1 Astronomical Unit (AU) = 149597870700 meters. + +We define a propagator that relates the parallax of a star, in radians, to the distance to the star, in parsecs: + +``` +(define-c:prop (c:parallax<->distance parallax distance) + (let-cells (t (AU AU-in-parsecs)) + (c:tan parallax t) + (c:* t distance AU))) +``` + +Here, the special form define-c:prop defines a special kind of procedure, a constructor named c:parallax<->distance. When c:parallax<->distance is given two cells, locally named parallax and distance, as its arguments, it constructs a constraint propagator that relates those cells. Using the special form letcells it creates two new cells, one locally named t, and the other locally named AU. The cell named t is not initialized; the cell named AU is initialized to the numerical value of the Astronomical Unit, the semimajor axis of the Earth's orbit, in parsecs. The cell named parallax and the cell named t are connected by a primitive constraint propagator constructed by c:tan, imposing the constraint that any value held by t must be the tangent of the value held by parallax. Similarly, the cells named t, distance, and AU are connected by a primitive constraint propagator constructed by c:\*, imposing the constraint that the product of the value in cell t and the value in cell distance is the value in AU. + +Let's think about the distance to the star Vega, as measured by parallax. We make two cells, Vega-parallax-distance for the distance, and Vega-parallax for the parallax angle: + +``` +(define-cell Vega-parallax-distance) +(define-cell Vega-parallax) +``` + +Now we can interconnect our cells with the propagator constructor that we just defined: + +``` +(c:parallax<->distance Vega-parallax Vega-parallax-distance) +``` + +The system of cells and propagators so constructed is illustrated in [figure](#page-5-0) 7.3. + +![](설계원칙-394-446_images/_page_5_Picture_5.jpeg) + +**[Figure](#page-5-1) 7.3** Here we see a "wiring diagram" of the propagator system constructed by calling c:parallax<->distance on the cells named Vega-parallax-distance (Vega d in the diagram) and Vega-parallax (Vega *θ* in the diagram). Circles indicate cells, and other shapes indicate propagators interconnecting the cells. These propagators are not directional—they enforce algebraic constraints. By convention we name constraint-propagator constructors with the prefix c:. For example, the propagator constructed by c:\* enforces the constraint that the product of the contents of the cell t and the contents of the cell Vega-parallaxdistance is the contents of the cell AU. + +The constraint propagators are themselves made up of directional propagators, as shown in [figure](#page-6-0) 7.4. A directional propagator, such as the multiplier constructed by p:\*, adjusts the value in the product cell to be consistent with the values in the multiplier and multiplicand cells. It is entirely appropriate to mix directional propagators and constraint propagators in a propagator system. [1](#page-48-0) + +Now let's use this small system to compute. Friedrich G. W. von Struve in 1837 published an estimate of the parallax of Vega: 0*.*125" ± 0*.*05". [2](#page-49-0) This was the first plausible published measurement of the parallax of a star, but because his data was sparse and he later contradicted that data, the credit for the first real measurement goes to Friedrich Wilhelm Bessel, who did a careful measurement of the parallax of the star 61 Cygni in 1838. However, Struve's estimate is quite close to the current best estimate of the parallax of Vega. We tell our propagator system Struve's estimate of 125 milliarcseconds plus or minus 50 milliarcseconds: + +![](설계원칙-394-446_images/_page_6_Picture_1.jpeg) + +**[Figure](#page-5-2) 7.4** The constraint propagator constructed by c:\* is made up of three directional propagators. By convention we name the directional-propagator constructors with the prefix p:. The directional multiplier propagator, constructed by p:\*, forces the value in c to be the product of the values in cells a and b. The divider propagators, constructed by p:/, force the value in their quotient cells (a and b) to be the result of dividing the value in the dividend cell (c) by the value in the divisor cells (b and a). + +``` +(tell! Vega-parallax + (+->interval (mas->radians 125) (mas->radians 50)) + 'FGWvonStruve1837) +``` + +The procedure tell! takes three arguments: a propagator cell, a value for that cell, and a premise symbol describing the provenance of the data. The procedure mas->radians converts milliarcseconds + +to radians. The procedure +->interval makes an interval centered on its first argument: + +``` +(define (+->interval value delta) + (make-interval (n:- value delta) (n:+ value delta))) +``` + +So the Vega-parallax cell is given the interval + +``` +(+->interval (mas->radians 125) (mas->radians 50)) +(interval 3.6361026083215196e-7 8.48423941941688e-7) +``` + +Struve's estimate of the error in his result was a pretty big fraction of the estimated parallax. So his estimate for the distance to Vega is pretty wide (roughly 5*.*7 to 13*.*3 or 9*.*5 *±* 3*.*8 parsecs): + +``` +(get-value-in Vega-parallax-distance) +(interval 5.7142857143291135 13.33333333343721) +(interval>+- (get-value-in Vega-parallax-distance)) +(+- 9.523809523883163 3.8095238095540473) +``` + +This interval value is supported by the premise FGWvonStruve1837. + +``` +(get-premises Vega-parallax-distance) +(support-set fgwvonstruve1837) +``` + +We will use a procedure inquire that nicely shows the value of the cell and the support for that value: [3](#page-49-1) + +``` +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 5.7143e0 1.3333e1)) + (depends-on fgwvonstruve1837) + (because + ((p:/ c:* c:parallax<->distance) + (au 4.8481e-6) + (t (interval 3.6361e-7 8.4842e-7))))) +``` + +A tighter bound, reported by Russell et al. in 1982 [106], is + +``` +(tell! Vega-parallax + (+->interval (mas->radians 124.3) (mas->radians 4.9)) + 'JRussell-etal1982) +``` + +which seems pretty close to the center of Struve's estimate. With that measurement, the distance estimate is narrowed to + +``` +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.7399 8.3752)) + (depends-on jrussell-etal1982)) +``` + +Notice that our estimate of the distance to Vega now depends only on the Russell measurement. Because the interval of the Russell measurement is entirely contained in the interval of the Struve measurement, the Struve measurement provides no further information. But the cell remembers the Struve measurement and its provenance so it can be recovered, if needed. + +By 1995 there were some better measurements: [4](#page-49-2) + +``` +(tell! Vega-parallax + (+->interval (mas->radians 131) (mas->radians 0.77)) + 'Gatewood-deJonge1995) +((vega-parallax) + (has-value (the-contradiction)) + (depends-on jrussell-etal1982 gatewood-dejonge1995) + (because + ((has-value (interval 5.7887e-7 6.2638e-7)) + (depends-on jrussell-etal1982)) + ((has-value (interval 6.3137e-7 6.3884e-7)) + (depends-on gatewood-dejonge1995)))) +``` + +We see that the contradiction depends on the two sources of information. Each source provides an interval, and the intervals do not overlap. Suppose we think that the measurement by Gatewood and de Jonge looks suspicious. Let's retract that premise: + +``` +(retract! 'Gatewood-deJonge1995) +``` + +All values that depend on the retracted premise are now retracted, and thus the value that we see for the distance has reverted to + +``` +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.7399 8.3752)) + (depends-on jrussell-etal1982)) +``` + +This is what we got from Russell et al.; and indeed that premise supports the value. + +But the plot thickens, because the Hipparcos satellite (as reported by Van Leeuwen [83]) made some very impressive measurements of the parallax of Vega: + +``` +(tell! Vega-parallax + (+->interval (mas->radians 130.23) (mas->radians +0.36)) + 'FvanLeeuwen2007Nov) +((vega-parallax) + (has-value (the-contradiction)) + (depends-on jrussell-etal1982 fvanleeuwen2007nov) + (because + ((has-value (interval 5.7887e-7 6.2638e-7)) + (depends-on jrussell-etal1982)) + ((has-value (interval 6.2963e-7 6.3312e-7)) + (depends-on fvanleeuwen2007nov)))) +``` + +Which do we believe? [5](#page-49-3) Let's reject the Russell result: + +``` +(retract! 'JRussell-etal1982) +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.6576 7.7)) + (depends-on fvanleeuwen2007nov)) +``` + +Here we have the satellite's result isolated. Now let's add back Gatewood and see what happens: + +``` +(assert! 'Gatewood-deJonge1995) +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.6576 7.6787)) + (depends-on gatewood-dejonge1995 fvanleeuwen2007nov)) +``` + +We get a stronger result because the intersection of the intervals of Van Leeuwen and Gatewood is smaller than either separately. [6](#page-49-4) (The Gatewood result, (interval 7.589 7.6787), is not shown.) + +#### **Magnitudes** + +There are other ways to estimate the distance to a star. We know that the apparent brightness of a star decreases with the square of the distance from us, so if we knew the intrinsic brightness of the star we could get the distance by measuring its apparent brightness. + +By now we have a pretty good theoretical understanding that can give reliable and accurate estimates of the intrinsic brightness of some kinds of stars. For those stars, spectroscopic analysis of the light we receive from the star gives us information about, for example, its state, its chemical composition, and its mass; and from these we can estimate the intrinsic brightness. Vega is a very good example of a star we know a lot about. + +Astronomers describe the brightness of a star in *magnitudes*. A difference of 5 magnitudes is defined to be a factor of 100 in brightness. [7](#page-49-5) The intrinsic brightness of a star is given as the magnitude it would appear to have if it were situated 10 parsecs away from the observer. This is called the *absolute magnitude* of the star. We can summarize the connection between brightness and distance in a neat formula that combines the inverse square law with the definition of magnitudes. If *M* is the absolute magnitude of a star, *m* is its apparent magnitude, and *d* is the distance to the star in parsecs, then *m* − *M* = 5(log10(*d*) − 1). This formula can be represented by a constraint-propagator constructor: [8](#page-50-0) + +``` +(define-c:prop + (c:magnitudes<->distance apparent-magnitude + absolute-magnitude + magnitude-distance) + (let-cells (dmod dmod/5 ld10 ld + (ln10 (log 10)) (one 1) (five 5)) + (c:+ absolute-magnitude dmod apparent-magnitude) + (c:* five dmod/5 dmod) + (c:+ one dmod/5 ld10) + (c:* ln10 ld10 ld) + (c:exp ld magnitude-distance))) +``` + +Now let's wire up some knowledge of Vega. We define some cells and interconnect them with the propagators: + +``` +(define-cell Vega-apparent-magnitude) +(define-cell Vega-absolute-magnitude) +(define-cell Vega-magnitude-distance) +(c:magnitudes<->distance Vega-apparent-magnitude + Vega-absolute-magnitude + Vega-magnitude-distance) +``` + +We now provide some measurements. Vega is very bright: its apparent magnitude is very close to zero. (The Hubble space telescope was used to make this very precise measurement. See Bohlin and Gilliland [14].) + +``` +(tell! Vega-apparent-magnitude + (+->interval 0.026 0.008) + 'Bohlin-Gilliland2004) +``` + +And the absolute magnitude of Vega is also known to rather high precision [44]: + +``` +(tell! Vega-absolute-magnitude + (+->interval 0.582 0.014) + 'Gatewood2008) +``` + +As a consequence we get a pretty nice estimate of the distance to Vega, which depends only on these measurements: + +``` +(inquire Vega-magnitude-distance) +((vega-magnitude-distance) + (has-value (interval 7.663 7.8199)) + (depends-on gatewood2008 bohlingilliland2004)) +``` + +Unfortunately, we have the distance in two different cells, so let's connect them with a propagator: + +``` +(c:same Vega-magnitude-distance Vega-parallax-distance) +``` + +At this point we have an even better value for the distance to Vega—an interval whose high end is the same as before (on page 336), but whose low end is a bit higher: + +``` +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.663 7.6787)) +``` + +``` +(depends-on fvanleeuwen2007nov gatewood-dejonge1995 + gatewood2008 bohlingilliland2004)) +``` + +Does the 1995 measurement of Gatewood and de Jonge really matter here? Let's find out: + +``` +(retract! 'Gatewood-deJonge1995) +(inquire Vega-parallax-distance) +((vega-parallax-distance) + (has-value (interval 7.663 7.7)) + (depends-on fvanleeuwen2007nov + gatewood2008 + bohlingilliland2004)) +``` + +Indeed it does. The 1995 measurement pulled in the high end of the interval. + +#### **Measurements Improved!** + +We have two ways of computing the distance to Vega—from parallax and from magnitude. Here is something remarkable: the parallax and magnitude measurement intervals are each improved using the information coming from the other. This is required in order for the system to be consistent. + +Look at the apparent magnitude of Vega. The original measurement supplied from Bohlin and Gilliland was *m* = 0*.*026 ± 0*.*008. This translates to the interval + +``` +(+->interval 0.026 0.008) +(interval .018 .034) +``` + +But now the value is a bit better—[0*.*018*,* 0*.*028456]: + +``` +(inquire Vega-apparent-magnitude) +((vega-apparent-magnitude) + (has-value (interval 1.8e-2 2.8456e-2)) + (depends-on gatewood2008 + fvanleeuwen2007nov + bohlin-gilliland2004)) +``` + +The high end had to be pulled in to be consistent with the information from the parallax measurements. This is true for each measurable quantity. The absolute magnitude supplied by Gatewood 2008 (page 338) was: + +``` +(+->interval 0.582 0.014) +(interval .568 .596) +``` + +### But now the low end is pulled in: + +``` +(inquire Vega-absolute-magnitude) +((vega-absolute-magnitude) + (has-value (interval 5.8554e-1 5.96e-1)) + (depends-on gatewood2008 + fvanleeuwen2007nov + bohlin-gilliland2004)) +``` + +The parallax is also improved by information from the magnitude measurements: + +``` +(inquire Vega-parallax) +((vega-parallax) + (has-value (interval 6.2963e-7 6.3267e-7)) + (depends-on fvanleeuwen2007nov + gatewood2008 + bohlin-gilliland2004)) +``` + +The fact that the computation propagates in all directions gives us a powerful tool for understanding the implications of any new information. + +# **Exercise 7.1: Making writing propagator networks easier** + +In our propagator system it is pretty painful to write the code to build even a simple network, because all internal nodes must be named. For example, a constraint propagator that converts between Celsius and Fahrenheit temperatures looks like: + +``` +(define-c:prop (celsius fahrenheit) + (let-cells (u v (nine 9) (five 5) (thirty-two 32)) + (c:* celsius nine u) + (c:* v five u) + (c:+ v thirty-two fahrenheit))) +``` + +It would be much nicer to be able to use expression syntax for some propagators, so we could write: + +``` +(define-c:prop (celsius fahrenheit) + (c:+ (ce:* (ce:/ (constant 9) (constant 5)) + celsius) + (constant thirty-two) + fahrenheit)) +``` + +Here ce:\* and ce:+ are propagator constructors that create the cell for the value and return it to their caller. The procedure ce:+ could be written: + +``` +(define (ce:+ x y) + (let-cells (sum) + (c:+ x y sum) + sum)) +``` + +Besides constraint propagators, there are also directional propagators such as p:+. A nice name for the expression form of this is pe:+. + +We have access to the names of all of the primitive arithmetic operators. Write a program that takes these names and installs both directional- and constraint-expression forms for each operator. + +# **Exercise 7.2: An electrical design problem** + +Note: You don't need to know electronics to do this problem. Anna Logue is designing a transistor amplifier. As part of her plan she needs to make a voltage divider to bias a transistor. The voltage divider is made of two resistors, with resistance values *R*1 and *R*2 . *ρ* is the ratio of output voltage *Vout* to power-supply voltage *Vin* . There is also *Z*, the output resistance of the divider. + +![](설계원칙-394-446_images/_page_15_Picture_0.jpeg) + +Here are the relevant equations: + +$$\rho = \frac{V_{out}}{V_{in}}$$ + +$$\rho = \frac{R_2}{R_1 + R_2}$$ + +$$Z = R_1 \rho$$ + +Since Anna has many problems like this to solve, she makes a constraint network to help her: + +![](설계원칙-394-446_images/_page_15_Figure_4.jpeg) + +- **a.** Make a propagator network that implements this diagram. +- **b.** Anna has a power supply with a voltage between 14.5 and 15.5 volts, and she needs the output of the voltage divider to be + +between 3.5 and 4.0 volts: *Vin* ∈ [14*.*5, 15*.*5] and *Vout* ∈ [3*.*5, 4*.*0]. + +She has in stock a 47000-ohm resistor for *R*2 . What is the range of values from which she can select *R*1? Can she choose a value for *R*1 that satisfies her specification? + +**c.** Anna also needs the output resistance of the divider to be between 20000 and 30000 ohms: *Z* ∈ [20000*,* 30000]. + +So her real problem is to find appropriate ranges of values for the voltage-divider resistors *R*1 and *R*2 given the division ratio *ρ* required and the specification of *Z*. + +If instead of choosing *R*2 (remember to retract the support for this value!) she chooses to assert the *Z* specification, this should determine *R*1 and *R*2 ; but the network will not find the value of *R*2 ! Why? Explain this problem. + +**d.** If we now tell *R*2 that it is somewhere in the range of 1000 ohms to 500000 ohms, the propagator network will converge to give a useful answer for the real range of *R*2 . Why? Explain this! + +# **Exercise 7.3: Local consistency—a project** + +Propagation is a way of attacking local consistency problems. For example, the Waltz algorithm [125] is a propagation method for interpreting line drawings of solid polyhedra. Map coloring and similar problems can be successfully attacked using propagation. + +The essential idea is that there is a graph with nodes that can be assigned one of a set of discrete labels, and that the nodes are interconnected by constraints that limit which labels are allowed based on the labels in neighboring nodes. For example, in the Waltz algorithm a line may have one of several labels. Each line connects two vertices. A vertex constrains the lines that terminate on it to be consistent with one of a set of possible geometric interpretations of the vertex. But the interpretation of a line must be the same at both ends of the line. + +- **a.** For these experiments you will need an "arithmetic" of discrete sets. You will need unions, intersections, and the complement of one set in another. Build such an arithmetic. +- **b.** The set of possibilities for a node is partial information about the actual status of the node: the smaller the set of possibilities the more information we have about the node. If we represent the knowledge about the status of a node as a propagator cell, the merger of two sets is their intersection. This is consistent with the intersection of intervals for ranges of real values. Make intersection of discrete sets a handler for generic merge. +- **c.** Build and demonstrate your solution to a local consistency problem using this organization. +- **d.** Notice that in many graphs the assignment of a node depends only on a few of the constraints. Show how to use support tracking to give explanations for the assignment of a node. + +# **7.2 The propagation mechanism** + +The essential propagation machinery consists of *cells*, *propagators*, and a *scheduler*. A *cell* accumulates information about a value. It must be able to say what information it has, and it must be able to accept updates to that information. It also must be able to alert propagators that are interested in its contents about changes to its contents. Each cell maintains a set of propagators that may be interested in its contents; these are called *neighbors*. + +A *propagator* is a stateless (functional) procedure that is activated by changes in the value of any cell it is interested in. Cells that may activate a propagator are its *input* cells. An activated propagator gathers information from its input cells and may compute an update for one or more *output* cells. A cell may be both an input and an output for a propagator. + +The *content* of a cell is the information it has accumulated about its value. When asked for its value, for example by a propagator, it + +responds with the *strongest* value it can provide. We have seen this in the use of intervals—a cell reports the tightest possible interval it knows about for its value. When a cell receives input it determines if the change in its contents makes a change in its strongest value. If the strongest value changes, the cell *alerts* its neighbors. This tells the scheduler to activate them. The *scheduler* is responsible for allocating computational resources to the activated propagators. It is intended that the computational result of propagation is independent of the details or order of scheduling. + +Cells and propagators are elements organized in a hierarchy. Each cell or propagator has a *name*, a *parent*, and perhaps a set of *children*. These are used to construct unique path names for each cell or propagator in the hierarchy. The path name can be used to access the element and to identify it in printed output. A cell or propagator is made either by the user or by a compound propagator. The parameter \*my-parent\* is dynamically bound by the parent. This allows the new cell or propagator to attach itself to the family. + +#### **7.2.1 Cells** + +A cell is implemented as a message-accepting procedure, using the bundle macro. The cell maintains its information in the content variable, which is initialized to a value the-nothing (identified by the predicate nothing?) that represents the absence of any information about the value. The value that the cell reports, when asked, is the strongest value that it has at the moment. The cell also maintains a list of its neighbors, the propagators that need to be alerted when the strongest value of the cell changes. An auxiliary data structure relations is used to hold the cell's family relations. + +Here is an outline of the constructor for cells. The interesting parts are add-content! and test-content!, explained below. + +``` +(define (make-cell name) + (let ((relations (make-relations name (*my-parent*))) + (neighbors '()) + (content the-nothing) + (strongest the-nothing)) + (define (get-relations) relations) +``` + +``` +(define (get-neighbors) neighbors) +(define (get-content) content) +(define (get-strongest) strongest) +(define (add-neighbor! neighbor) + (set! neighbors (lset-adjoin eq? neighbors neighbor))) +(define (add-content! increment) + (set! content (cell-merge content increment)) + (test-content!)) +(define (test-content!) + See definition on page 345.) +(define me + (bundle cell? get-relations get-neighbors + get-content get-strongest add-neighbor! + add-content! test-content!)) +(add-child! me (*my-parent*)) +(set! *all-cells* (cons me *all-cells*)) +me)) +``` + +A cell receives new information through a call to add-content!. The new information, increment, must be merged with the existing information in content. In general, the merging process is specific to the kind of information being merged, so the merging mechanism for the cell must be specified. However, the-nothing, which represents the absence of information, is special. Any information merged with the-nothing is returned unchanged. + +The reason for merging rather than replacement is to use partial information to refine our knowledge of the value. [9](#page-50-1) For example, in the computation of stellar distances described above, intervals are merged to produce better estimates by intersection. In the typeinference example (see section 4.4.2) we combined descriptions by unification to get more specific information. We will examine the general problem of merging values in section 7.4. + +In some cases it may not be possible to merge two pieces of information. For example, the value of an unknown number cannot be both zero and one. In this case cell-merge returns a *contradiction object*, which may carry information about the details of the conflict. If there is no extra information to be had, the contradiction object is the symbol the-contradiction, which satisfies the primitive predicate contradiction?. More complex contradictions are detected by the generic predicate procedure + +general-contradiction?. Contradictions are resolved, if possible, by handle-cell-contradiction, as explained in section 7.5. + +If the cell's strongest value changes, the neighbors are alerted. But if an increment does not affect the strongest value, it provides no additional information; in that case it is important to avoid alerting the neighbors, to prevent useless loops. All this is implemented by the test-content! procedure, which is defined as an internal procedure in make-cell. + +``` +(define (test-content!) + (let ((strongest* (strongest-value content))) + (cond ((equivalent? strongest strongest*) + (set! strongest strongest*) + 'content-unchanged) + ((general-contradiction? strongest*) + (set! strongest strongest*) + (handle-cell-contradiction me) + 'contradiction) + (else + (set! strongest strongest*) + (alert-propagators! neighbors) + 'content-changed)))) +``` + +The procedure test-content! is also used to alert all cells when a premise changes its belief status. Each alerted cell checks if its strongest value has changed, requiring some action, like signaling a contradiction or alerting its propagator neighbors. See section 7.3. + +To hide the implementation details of a cell we provide convenient access procedures: + +``` +(define (add-cell-neighbor! cell neighbor) + (cell 'add-neighbor! neighbor)) +(define (add-cell-content! cell increment) + (parameterize ((current-reason-source cell)) + (cell 'add-content! increment))) +(define (cell-strongest cell) + (cell 'get-strongest)) +``` + +The current-reason-source parameter in add-cell-content! is part of the layer that gives a reason for every value, as described in + +footnote 3 on page 333. This useful feature will not be further elaborated here. + +#### **7.2.2 Propagators** + +To make a propagator we supply a list of input cells, a list of output cells, and a procedure activate! to execute when alerted. The constructor introduces the propagator to its input cells with addcell-neighbor!. It also alerts the new propagator so that it will be run if needed. + +``` +(define (propagator inputs outputs activate! name) + (let ((relations (make-relations name (*my-parent*)))) + (define (get-inputs) inputs) + (define (get-outputs) outputs) + (define (get-relations) relations) + (define me + (bundle propagator? activate! + get-inputs get-outputs get-relations)) + (add-child! me (*my-parent*)) + (for-each (lambda (cell) + (add-cell-neighbor! cell me)) + inputs) + (alert-propagator! me) + me)) +``` + +Primitive propagators are directional in that their outputs do not overlap with their inputs. We make primitive propagators from Scheme procedures that produce a single output. By convention, we build a primitive propagator by passing the input cells and the output cell together, with the output last. We could make a primitive propagator that produced several outputs, such as integer divide with remainder, but we do not need this here. + +``` +(define (primitive-propagator f name) + (lambda cells + (let ((output (car (last-pair cells))) + (inputs (except-last-pair cells))) + (propagator inputs (list output) + (lambda () + (let ((input-values (map cell-strongest inputs))) + (if (any unusable-value? input-values) +``` + +``` +'do-nothing + (add-cell-content! output + (apply f input-values))))) +name)))) +``` + +When activated, a propagator may choose to compute a result using f. The result of calling f on the input values is added to the output cell. We call this choice process the *activation policy*. Here we require all inputs to be *usable* values. By default, contradiction objects and the-nothing are unusable, though we may add others later. Other policies are possible. + +Propagators may be constructed by combining other propagators. We make compound propagators by supplying a procedure tobuild that builds the desired network from parts. A compound propagator is not built until it is needed to make a computation. But that need arises only when data arrives at one or more of its input cells to activate it. However, we do not want to rebuild the compound propagator network every time it gets new values in its input cells, so the constructor must make sure that it is built only once. This is arranged with a boolean flag built? that is set when the build is done. + +``` +(define (compound-propagator inputs outputs to-build name) + (let ((built? #f)) + (define (maybe-build) + (if (or built? + (and (not (null? inputs)) + (every unusable-value? + (map cell-strongest inputs)))) + 'do-nothing + (begin (parameterize ((*my-parent* me)) + (to-build)) + (set! built? #t) + 'built))) + (define me + (propagator inputs outputs maybe-build name)) + me)) +``` + +The activation policy for a compound propagator is different from the activation policy for a primitive propagator. Here we build the network if any input has a usable value. This is appropriate because + +some part of the network may do some useful computation even if not all of the inputs are available. + +The parameterize machinery is in support of the hierarchical organization of the propagator elements. It makes the compound propagator the parent of any cells or propagators that are constructed in the building of the network. + +As described in [figure](#page-6-0) 7.4 on page 332, constraint propagators are constructed by combining directional propagators. For example, we can make the propagator that enforces the constraint that the product of the values in two cells is the value in the third as follows: + +``` +(define-c:prop (c:* x y product) + (p:* x y product) + (p:/ product x y) + (p:/ product y x)) +``` + +Here we see that three directional propagators are combined to make the constraint. This can work because we merge values rather than replacing them, and equivalent values do not propagate. If equivalent values propagated, anything like the c:\* propagator would be an infinite loop. [10](#page-50-2) + +The macro define-c:prop is just syntactic sugar. The actual code produced by the macro is: + +``` +(define (c:* x y product) + (constraint-propagator + (list x y product) + (lambda () + (p:* x y product) + (p:/ product x y) + (p:/ product y x)) + 'c:*)) +``` + +where constraint-propagator is just: + +``` +(define (constraint-propagator cells to-build name) + (compound-propagator cells cells to-build name)) +``` + +All the cells associated with a constraint propagator are both input and output cells. + +# **7.3 Multiple alternative world views** + +In our stellar distances example we showed that each value carried the support set of premises used in its computation, and also the "reason" for the value (the propagator that made it and the values that it was made from). This was done using the layered-data mechanism we introduced in section 6.4. But some "facts" are mutually inconsistent. In our example we modulated the belief in the premises to obtain locally consistent world views, depending on which premises we chose to believe. + +A premise is either in (believed) or out (not believed). The user in our example could assert! a premise to bring it in or retract! it to kick it out. The "magic" in the system is that the observable values in cells are always those that are *fully supported*—those for which the supporting premises are all in—even as the beliefs in the premises are changed. [11](#page-50-3) + +It is silly to recompute all of the values as the belief status of the support changes. We can do better by remembering values that are not currently fully supported. This allows us to reassert a premise, and recover the values that it supports without recomputing those values. When the state of belief in a premise changes, cells must check if their strongest value has changed. This is accomplished by calling the test-content! for every cell; each cell whose strongest value changes alerts the propagators that depend on that cell's value. Each of those propagators then gets the strongest values of the contents of its input cells and computes (or recomputes!) its output value. If that output value is equivalent to the strongest value already stored in the output cell, there will be no further action. If the belief status of the strongest value in the output cell changes, this will cause its neighboring propagators to recompute. But the strongest value in the output cell may have independent support, in which case the propagation will stop there. + +To make this work, in each cell the content may hold a set of values (the *value set*) paired with the premises they depend upon. + +The cell extracts the strongest-value from the content and keeps it in the local variable strongest, which can be accessed using cell-strongest. The strongest value is the best choice of the fully supported values in the set, [12](#page-50-4) or the-nothing if none of the values in the set are fully supported. + +It remains to elucidate strongest-value, which must be able to operate on raw data, on layered data, and on value sets. Thus it is appropriate to make it a generic procedure. The strongest value of an unannotated data item is just that data item, so this provides the default. + +``` +(define strongest-value + (simple-generic-procedure 'strongest-value 1 + (lambda (object) object))) +``` + +If a layered data item is fully supported, then its strongest value is itself, otherwise its strongest value is no information. + +``` +(define-generic-procedure-handler strongest-value + (match-args layered-datum?) + (lambda (elt) + (if (all-premises-in? (support-layer-value elt)) + elt + the-nothing))) +``` + +The strongest value of a value set is the strongest consequence of the set: + +``` +(define-generic-procedure-handler strongest-value + (match-args value-set?) + (lambda (set) (strongest-consequence set))) +``` + +The procedure strongest-consequence just merges together the elements of a value set that are fully supported. It uses mergelayered to determine the "best choice" of the fully supported values in the value set (see section 7.4.2). If there are no fully supported values there is no information, so the result is thenothing. + +``` +(define (strongest-consequence set) + (fold (lambda (increment content) +``` + +``` +(merge-layered content increment)) +the-nothing +(filter (lambda (elt) + (all-premises-in? + (support-layer-value elt))) + (value-set-elements set)))) +``` + +# **7.4 Merging values** + +We have not addressed what it means to merge values. This is a complicated process, with three parts: merging base values, such as numbers and intervals; merging supported values; and merging value sets. The procedure cell-merge in add-content! must be assigned to an appropriate merger for the data being propagated. On page 366, setup-propagator-system initializes cell-merge to merge-value-sets. + +#### **7.4.1 Merging base values** + +There are only a few base value types in our example propagator system: the-nothing, the-contradiction, numbers, booleans, and intervals. Numbers and booleans are simple in that only equivalent values can be merged. If they cannot be merged it is a contradiction. Anything merged with the-nothing is itself. Anything merged with the-contradiction is the-contradiction. The merge procedure is generic for base values, and the default handler deals with all the simple cases—all except intervals. + +``` +(define merge + (simple-generic-procedure 'merge 2 + (lambda (content increment) + (cond ((nothing? content) increment) + ((nothing? increment) content) + ((contradiction? content) content) + ((contradiction? increment) increment) + ((equivalent? content increment) content) + (else the-contradiction))))) +``` + +In the astronomy example we also have interval arithmetic, so we need to be able to merge intervals: + +``` +(define (merge-intervals content increment) + (let ((new-range (intersect-intervals content increment))) + (cond ((interval=? new-range content) content) + ((interval=? new-range increment) increment) + ((empty-interval? new-range) the-contradiction) + (else new-range)))) +``` + +We can merge a number with an interval. We get the number if it is contained in the interval, otherwise it is a contradiction: + +``` +(define (merge-interval-real int x) + (if (within-interval? x int) + x + the-contradiction)) +``` + +This all gets glued together as a generic procedure handler: + +``` +(define-generic-procedure-handler merge + (any-arg 2 interval? real?) + (lambda (x y) + (cond ((not (interval? x)) (merge-interval-real y x)) + ((not (interval? y)) (merge-interval-real x y)) + (else (merge-intervals x y))))) +``` + +There are no other cases of base value merges. + +#### **7.4.2 Merging supported values** + +A supported value is implemented as a layered data item that has a support layer and the base value being propagated. So the merger for supported values must be a layered procedure: + +``` +(define merge-layered + (make-layered-procedure 'merge 2 merge)) +``` + +The support layer implements merge with support:merge, which is given three arguments: the merged value computed by the base layer, the current content, and the new increment. The job of support:merge is to deliver the support set appropriate for the merged value. If the merged value is the same as the value from the + +content or the value from the increment, we can use that argument's support. But if the merged value is different, we need to combine the supports. + +``` +(define (support:merge merged-value content increment) + (cond ((equivalent? merged-value + (base-layer-value content)) + (support-layer-value content)) + ((equivalent? merged-value + (base-layer-value increment)) + (support-layer-value increment)) + (else + (support-set-union + (support-layer-value content) + (support-layer-value increment))))) +(define-layered-procedure-handler merge-layered support-layer + support:merge) +``` + +Here define-layered-procedure-handler is used to attach the procedure support:merge to the layered procedure merge-layered as its support-layer handler. + +#### **7.4.3 Merging value sets** + +To merge value sets, we just add the elements of the increment to the content to make a new set. Note that ->value-set coerces its argument to a value set. + +``` +(define (merge-value-sets content increment) + (if (nothing? increment) + (->value-set content) + (value-set-adjoin (->value-set content) increment))) +``` + +When adjoining a new element to the content, we do not add the element if it is subsumed by any existing content element. + +``` +(define (value-set-adjoin set elt) + (if (any (lambda (old-elt) + (element-subsumes? old-elt elt)) + (value-set-elements set)) + set + (make-value-set + (lset-adjoin equivalent? +``` + +``` +(value-set-elements set) +elt)))) +``` + +The criteria for subsumption are a bit complicated. One element subsumes another if its base value is at least as informative as the other's base value and if its support is a subset of the other's. (Note: A smaller support set is a stronger support set, because it depends on fewer premises.) + +``` +(define (element-subsumes? elt1 elt2) + (and (value-implies? (base-layer-value elt1) + (base-layer-value elt2)) + (support-set<= (support-layer-value elt1) + (support-layer-value elt2)))) +``` + +The procedure value-implies? is a generic procedure, because it must be able to work with many kinds of base data, including intervals. + +# **Exercise 7.4: Merging with unification** + +We have seen how intervals that partially specify a numerical value can be merged to get more specific information about that value. Another kind of partial information is symbolic patterns, with holes for missing information. This kind of information can be merged using unification, as described in section 4.4. We used unification to implement a simple version of type inference, but it can be used more generally for combining partially specified symbolic expressions. The example of combining records about Ben Franklin in section 4.4 may be suggestive. One way to think about organizing a propagator system is that each cell is a small database restricted to information about some particular thing. The propagators interconnecting cells are ways that deductions can be made. For example, one promising domain is the classification of topological spaces in point-set topology. Another is the organization of your living group—for example, the adjacency relationships of rooms and the social relationships of the inhabitants. Pick a domain that you find interesting. Use your imagination! + +- **a.** Design a propagator network where each cell will hold some particular kind of symbolic information. For example, a cell may represent what is known about a student at MIT. The information may be name, address, telephone number, class year, major, birthday, best friends... This requires designing an extensible data structure that can hold this information and more. You will also need propagators that relate the people. So you may get information from one person, or from multiple people, about another. This may be a nice model of gossip. Make some primitive propagators that manipulate these symbolic quantities and wire up an interesting network. +- **b.** Add unification as a generic procedure handler for merge, and show how it can be used to combine partial symbolic information coming in from multiple sources. +- **c.** Discover some interesting compound symbolic propagators that can be used to represent the common combinations of connections of related subjects in your network. + +# **7.5 Searching possible worlds** + +It would be nice if search were unnecessary. Unfortunately, for many kinds of real problems it is helpful to "assume for the sake of argument" something that may not be true. We then work out the consequences of that assumption. If the assumption leads to a contradiction, we retract it and try something else. But in any case, the assumption may enable other deductions that help solve the problem. + +We started to explore this idea in section 5.4, where we introduced amb and used it in search problems. In those adventures with amb we were working in an expression-oriented language with an order of execution that was constrained by the way expressions are evaluated. We partly extracted ourselves from that constraint with the painful use of continuations, either structuring the + +evaluator to explicitly pass around continuation procedures (in section 5.4.2), or using Scheme's implicit continuations via call/cc (in section 5.5.3). But even with call/cc we do not have sufficient control of the search process. + +In section 6.4 we showed how to associate each value with a support set, the set of premises that the value depends on. If each assumption is labeled with a new premise, we can know exactly the combination of assumptions that led to a contradiction. If we are clever, we can avoid asserting that combination of assumptions later in the search. But in the evaluation of expressions it is hard to isolate the assertion of assumptions from the flow of control. + +The problem is that in an expression language, the choice decisions are made as expressions are evaluated, producing a branching decision tree. The decision tree is evaluated in some order, for example, depth first or breadth first. The consequences of any sequence of decisions are evaluated after the decisions are made. If a failure is encountered (a contradiction is noted), only the decisions on the evolved branch are possible culprits. But if only some of the decisions on the branch are at fault, there may be some innocent ones that were made later than the last culprit. Computations that depend only on the innocent decisions are lost in backing up to the last culprit. So retracting a branch to an earlier decision may require losing lots of useful deductions. + +By contrast, in real problems the consequences of decisions are usually local and limited. For example, when solving a crossword puzzle we often get stuck—we are unable to fill in any blanks that we are sure of. But we can make progress by assuming that some box contains a particular letter, without very good evidence for that assumption. Positing that the box contains that letter allows deductions to follow, but eventually it may be found that the assumption was incorrect and must be retracted. However, many of the deductions made since the assumption are correct, because they did not depend on that assumption. We do not retract those correct deductions just to eliminate the consequences of the wrong assumption. We want the actual consequences of wrong assumptions to be retracted, leaving consequences of other + +assumptions believed. This is rather hard to arrange in an expression-oriented language system. + +With propagators we have escaped the control structure based on evaluation of expressions, at the cost of thinking of the propagators as independent machines running in parallel. Because a propagator cell may contain a value set whose elements are layered values, we can associate a support set with each value. In the propagator system a value is believed only when all of the premises in its support set are believed; and only believed values are propagated. In this way we have the ability to switch world views by modulating the belief status of each premise independently. + +Some combinations of premises are contradictory. A contradiction is discovered when the system tries to merge two incompatible fully supported values, thus deriving a contradiction object. The contradiction object has a support set with those premises that imply the contradiction. + +To make this work we introduce an amb-like choice propagator, which makes assumptions about the value of a cell that it controls. Each assumption is supported by a *hypothetical premise* created by the choice propagator that it may assert or retract. The propagator network computes the consequences of alternative assignments of the values of the assumptions made by the choice propagators in the network until a consistent assignment is found. + +#### **An example: Pythagorean triples** + +Consider the problem of finding the Pythagorean triples for natural numbers up to ten. (We considered a similar problem on page 272. Here we are setting up an even dumber algorithm!). We can formulate this as a propagator problem: + +``` +(define (pythagorean) + (let ((possibilities '(1 2 3 4 5 6 7 8 9 10))) + (let-cells (x y z x2 y2 z2) + (p:amb x possibilities) + (p:amb y possibilities) + (p:amb z possibilities) + (p:* x x x2) +``` + +``` +(p:* y y y2) +(p:* z z z2) +(p:+ x2 y2 z2) +(list x y z)))) +``` + +This code constructs a propagator network with three multiplier propagators and an adder propagator that will be satisfied if the values in cells x, y, and z are a Pythagorean triple. Each of these cells is connected to a choice propagator, created by p:amb, that will choose an element from possibilities. + +To run this we must first initialize the propagator system: + +``` +(initialize-scheduler) +``` + +We can now build the propagator network and extract all of the triples from it. The procedure pythagorean constructs the propagator network and returns a list of the three cells of interest. The procedure run turns on the scheduler, thus running the network. While running, the choice propagators propose values of x, y, and z until either an unresolvable contradiction is found or the network becomes quiescent. If no contradiction is found, run returns done, and the base values of the strongest values of each of the interesting cells are printed. Then that combination of values is rejected, and the loop is continued with a new call to run. + +``` +(let ((answers (pythagorean))) + (let try-again ((result (run))) + (if (eq? result 'done) + (begin + (pp (map (lambda (cell) + (get-base-value + (cell-strongest cell))) + answers)) + (force-failure! answers) + (try-again (run))) + result))) +(3 4 5) +(4 3 5) +(6 8 10) +(8 6 10) +(contradiction #[cell x]) +``` + +#### **7.5.1 Dependency-directed backtracking** + +Dependency-directed backtracking is a powerful technique that optimizes a backtracking search by avoiding asserting a set of premises that support any previously discovered contradiction. [13](#page-51-0) The dependency-directed backtracking strategy we use is based on the concept of a *nogood set*—a set of premises that cannot all be believed at the same time, because their conjunction has been found to support a contradiction. When a cell contains two or more contradictory values, the union of the support sets of those values is a nogood set. + +When a contradiction is detected, the nogood set for that contradiction is saved to let the backtracker know not to try that combination again. To make it easy for the backtracking mechanism, the nogood set is not stored directly: it is distributed to each premise in the nogood set. Each premise gets a copy of the set with itself removed. For example, if the nogood set is {A B C ... }, then the premise A gets the set {B C ... }, the premise B gets the set {A C ... }, and so on. For any given premise, the list of all the partial nogood sets that have been accumulated from contradictions that the premise has participated in can be obtained with the premisenogoods accessor. + +Once the nogood set is saved, the backtracker chooses a hypothetical premise from the nogood set (if any) and retracts it. The retraction activates the propagators that are neighbors of cells with values previously supported by that hypothetical, including the propagator that originally asserted that hypothetical, causing that propagator to assert a different hypothetical, if possible. If there are no hypothetical premises in the nogood set, the backtracker has no options, so it returns a failure. + +Of course there is a lot of bookkeeping that needs to be done to make this work. Let's understand how that can be implemented. + +**Hypotheticals are made and controlled by binary-amb** + +The simplest choice propagator is constructed by binary-amb. The result of calling binary-amb on a cell is a binary-amb propagator with the cell as both an input and an output. A binary-amb propagator modulates the value of the cell to be either true or false, until a consistent assignment is found. + +The procedure binary-amb introduces two new premises, which are marked as hypothetical premises. A *hypothetical premise* is one whose belief is allowed to be automatically varied as needed. + +The binary-amb procedure initializes the cell with a contradiction: the procedure make-hypotheticals creates both a true value and a false value, each supported by a new hypothetical premise, and adds both values to the content of the cell. Adding these values activates the cell, calling its test-content! procedure, which starts the contradiction-handling mechanism, which ultimately alerts the binary-amb propagator of the unhappy cell. The contradiction will then be fixed by the binary-amb propagator's activate! procedure amb-choose: + +``` +(define (binary-amb cell) + (let ((premises (make-hypotheticals cell '(#t #f)))) + (let ((true-premise (car premises)) + (false-premise (cadr premises))) + (define (amb-choose) + (let ((reasons-against-true + (filter all-premises-in? + (premise-nogoods true-premise))) + (reasons-against-false + (filter all-premises-in? + (premise-nogoods false-premise)))) + (cond ((null? reasons-against-true) + (mark-premise-in! true-premise) + (mark-premise-out! false-premise)) + ((null? reasons-against-false) + (mark-premise-out! true-premise) + (mark-premise-in! false-premise)) + (else + (mark-premise-out! true-premise) + (mark-premise-out! false-premise) + (process-contradictions + (pairwise-union reasons-against-true + reasons-against-false) + cell))))) +``` + +``` +(let ((me (propagator (list cell) (list cell) + amb-choose 'binary-amb))) + (set! all-amb-propagators + (cons me all-amb-propagators)) + me)))) +``` + +The amb-choose procedure uses the premise nogoods to determine whether the premise supporting the true value or the premise supporting the false value may be believed. Each element of the premise-nogoods of a premise is a set of premises such that if they are all believed, the premise cannot be believed. So if ambchoose finds any fully supported premise nogood for a premise, that premise cannot be believed. + +If the premise supporting the true value or the premise supporting the false value is believable, amb-choose asserts true or false respectively. If neither is believable, it defers to higher-level contradiction processing (process-contradictions) in the hope that after the beliefs in other premises are modulated, it may be possible to assert true or false when this propagator is reactivated. The argument given to process-contradictions, constructed by pairwise-union, is a set of nogoods. Each of these nogoods is the union of a set of premises that rule out the choice of true and a set of premises that rule out a choice of false. Thus, any one of these nogoods would prevent the choice of either alternative. [14](#page-51-1) + +``` +(define (pairwise-union nogoods1 nogoods2) + (append-map (lambda (nogood1) + (map (lambda (nogood2) + (support-set-union nogood1 nogood2)) + nogoods2)) + nogoods1)) +``` + +#### **Learning from contradictions** + +The procedure process-contradictions saves all of the nogoods it received, distributing the information in the nogoods to the premise nogoods of the premises. It then chooses a nogood to disbelieve by retracting one of its hypothetical premises, if there are any. + +``` +(define (process-contradictions nogoods complaining-cell) + (update-failure-count!) + (for-each save-nogood! nogoods) + (let-values (((to-disbelieve nogood) + (choose-premise-to-disbelieve nogoods))) + (maybe-kick-out to-disbelieve nogood complaining-cell))) +``` + +The procedure save-nogood! augments the premise-nogoods of each premise in the given nogood set with the set of other premises it is incompatible with. This is how the system learns from its past failures. The premise being updated is not included in its own premise nogood sets, because a premise may not be incompatible with itself. + +``` +(define (save-nogood! nogood) + (for-each (lambda (premise) + (set-premise-nogoods! premise + (adjoin-support-with-subsumption + (support-set-remove nogood premise) + (premise-nogoods premise)))) + (support-set-elements nogood))) +``` + +The new premise nogood may either subsume or be subsumed by one of the existing premise nogoods; minimal premise nogoods are most useful. + +#### **Resolving the contradiction** + +A contradiction is resolved by retracting one of the premises in the nogood set that supports the contradiction. The only premises that can be retracted are the hypotheticals, which are asserted "for the sake of argument." If there is more than one nogood set supporting a contradiction, we choose one with the smallest number of hypotheticals, because disbelieving a small nogood set rules out more possiblities than disbelieving a nogood set with a larger number of hypotheticals. + +``` +(define (choose-premise-to-disbelieve nogoods) + (choose-first-hypothetical + (car (sort-by nogoods + (lambda (nogood) +``` + +``` +(count hypothetical? + (support-set-elements nogood))))))) +``` + +However, the choice of which hypothetical from the selected nogood set to reject is not apparent. Here we arbitrarily choose the first hypothetical premise available in the nogood set. + +``` +(define (choose-first-hypothetical nogood) + (let ((hyps (support-set-filter hypothetical? nogood))) + (values (and (not (support-set-empty? hyps)) + (car (support-set-elements hyps))) + nogood))) +``` + +The procedure maybe-kick-out finishes the job of resolving the contradiction. If the chooser was able to find a suitable hypothesis to disbelieve, then that hypothesis is retracted and propagation continues normally. Otherwise, the propagation process is stopped and the user is informed about the contradiction. + +``` +(define (maybe-kick-out to-disbelieve nogood cell) + (if to-disbelieve + (mark-premise-out! to-disbelieve) + (abort-process (list 'contradiction cell)))) +``` + +# **Contradictions discovered in a cell** + +If in the process of adding content to a cell a contradiction is discovered, the unhappy cell calls handle-cell-contradiction with itself as the argument. At that moment the strongest value in the cell is the contradiction object, and the support of the contradiction object is the irritating nogood set. This can be handed off to process-contradictions to deal with. + +``` +(define (handle-cell-contradiction cell) + (let ((nogood (support-layer-value (cell-strongest cell)))) + (process-contradictions (list nogood) cell))) +``` + +This is all that needs to be done to support dependency-directed backtracking. + +#### **Non-binary amb** + +Although binary-amb can be used in the formulation of many problems, most choices are not binary. It is possible to construct an *n*-ary choice mechanism from binary-amb by building a circuit of conditional propagators controlled by cells whose true or false values are modulated by binary-amb propagators, but this is very inefficient and introduces lots of extra machinery. So we provide a native *n*-ary choice mechanism with p:amb. The procedure p:amb is analogous to binary-amb. For binary-amb there are exactly two choices, #t or #f, for the value in the cell, and each is supported by a hypothetical premise. When p:amb is applied to a cell and a list of possible values, the procedure make-hypotheticals adds those values to the cell, each supported by a new hypothetical premise. + +When the propagator constructed by p:amb is activated, the procedure amb-choose is called. It first tries to find a hypothetical premise, among its hypotheticals, that is not ruled out by its premise-nogoods. If there is one, it marks that premise in and marks all of the other premises out, thus choosing the value associated with that premise as the value of the cell. If none of the hypothetical premises can be believed, it marks all of its premises out and makes a new set of nogoods to pass to processcontradictions, which will retract a hypothetical premise from one of those nogoods, if possible. The generalization of the procedure pairwise-union to take more than two setsis crossproduct-union. As before, this is a resolution step. + +``` +(define (p:amb cell values) + (let ((premises (make-hypotheticals cell values))) + (define (amb-choose) + (let ((to-choose + (find (lambda (premise) + (not (any all-premises-in? + (premise-nogoods premise)))) + premises))) + (if to-choose + (for-each (lambda (premise) + (if (eq? premise to-choose) + (mark-premise-in! premise) +``` + +``` +(mark-premise-out! premise))) + premises) + (let ((nogoods + (cross-product-union + (map (lambda (premise) + (filter all-premises-in? + (premise-nogoods premise))) + premises)))) + (for-each mark-premise-out! premises) + (process-contradictions nogoods cell))))) +(let ((me (propagator (list cell) (list cell) + amb-choose 'amb))) + (set! all-amb-propagators + (cons me all-amb-propagators)) + me))) +``` + +Choice propagators built with p:amb introduce only as many hypothetical premises as there are choices. Constructions for *n >* 2 choices based on binary-amb introduce about twice that many premises. + +#### **7.5.2 Solving combinatorial puzzles** + +To demonstrate the use of dependency-directed backtracking to solve combinatorial puzzles efficiently, consider the famous "multiple dwelling" puzzle:[29] + +Baker, Cooper, Fletcher, Miller, and Smith live on different floors of an apartment house that has only five floors. Baker does not live on the top floor. Cooper does not live on the bottom floor. Fletcher does not live on either the top or the bottom floor. Miller lives on a higher floor than does Cooper. Smith does not live on a floor adjacent to Fletcher's. Fletcher does not live on a floor adjacent to Cooper's. Where does everyone live? + +We can set this up as a propagator problem. Here is a very unsophisticated formulation of the problem: + +``` +(define (multiple-dwelling) + (let-cells (baker cooper fletcher miller smith) +``` + +``` +(let ((floors '(1 2 3 4 5))) + (p:amb baker floors) (p:amb cooper floors) + (p:amb fletcher floors) (p:amb miller floors) + (p:amb smith floors) + (require-distinct + (list baker cooper fletcher miller smith)) + (let-cells ((b=5 #f) (c=1 #f) (f=5 #f) + (f=1 #f) (m>c #t) (sf #f) + (fc #f) (one 1) (five 5) + s-f as-f f-c af-c) + (p:= five baker b=5) ;Baker is not on 5. + (p:= one cooper c=1) ;Cooper is not on 1. + (p:= five fletcher f=5) ;Fletcher is not on 5. + (p:= one fletcher f=1) ;Fletcher is not on 1. + (p:> miller cooper m>c) ;Miller is above Cooper. + (c:+ fletcher s-f smith) ;Fletcher and Smith + (c:abs s-f as-f) ; are not on + (p:= one as-f sf) ; adjacent floors. + (c:+ cooper f-c fletcher) ;Cooper and Fletcher + (c:abs f-c af-c) ; are not on + (p:= one af-c fc) ; adjacent floors. + (list baker cooper fletcher miller smith))))) +``` + +This says that Baker, Cooper, Fletcher, Miller, and Smith all choose to live on one of the five floors, and their choices must be distinct. We then see the constraints on their choices represented as a propagator circuit. Some cells, such as b=5, are initialized to a boolean value. Thus, the line (p:= five baker b=5) represents the constraint that Baker does not live on the fifth floor. The constraint that Cooper and Fletcher do not live on adjacent floors is implemented by the assignment of fc to #f and the last three constraints. + +To use the propagator system we need to define all the primitive propagators, with the appropriate layering of the data: + +``` +(define (setup-propagator-system arithmetic) + (define layered-arith + (extend-arithmetic layered-extender arithmetic)) + (install-arithmetic! layered-arith) + (install-core-propagators! merge-value-sets + layered-arith + layered-propagator-projector)) +``` + +This rather complicated setup procedure gives the information required to build and install the propagators with an arithmetic, layered with premises that can be tracked and reasons that are available for debugging. The default setup, when the propagator system is loaded, is for numerical data: + +``` +(setup-propagator-system numeric-arithmetic) +``` + +We are now in a position to run our puzzle example: + +``` +(initialize-scheduler) +(define answers (multiple-dwelling)) +(run) +(map (lambda (cell) + (get-base-value (cell-strongest cell))) + answers) +;Value: (3 2 4 5 1) +*number-of-calls-to-fail* +;Value: 106 +``` + +We see the (correct) result: the floor on which each protagonist lives. We also see that it takes roughly 100 failed assignments to find a correct assignment. [15](#page-51-2) It turns out that this assignment is unique: there are no other assignments consistent with the constraints given. + +Notice that the total number of unconstrained assignments is 5 5 = 3125, but we are solving this with only about 100 trials. We are able to do this because the system learns from its mistakes: For each failure it accumulates information about which sets of premises cannot be simultaneously believed. Correctly using this information prevents the investigation of paths that are hopeless given the results of previous experiments. + +# **Exercise 7.5: Yacht name puzzle** + +Formulate and solve the following puzzle using propagators. [16](#page-51-3) Mary Ann Moore's father has a yacht and so has each of his four friends: Colonel Downing, Mr. Hall, Sir Barnacle Hood, and Dr. Parker. Each of the five also has one daughter and each has named his yacht after a daughter of one of the others. Sir Barnacle's yacht is the Gabrielle, Mr. Moore owns the Lorna; Mr. Hall the Rosalind. The Melissa, owned by Colonel Downing, is named after Sir Barnacle's daughter. Gabrielle's father owns the yacht that is named after Dr. Parker's daughter. Who is Lorna's father? + +# **Exercise 7.6: Multiple-dwelling puzzle** + +It is easy to formulate the multiple-dwelling problem for the amb evaluator of chapter 5.4. In fact it is easier than for the propagator system, because we can think and write in terms of expressions. Indeed, you will be able to write constraints like the fact that Fletcher and Cooper do not live on adjacent floors as something like: + +``` +(require (not (= (abs (- fletcher cooper)) 1))) +rather than + (c:+ cooper f-c fletcher) + (c:abs f-c af-c) + (p:= one af-c fc) +``` + +where cells like f-c, af-c, and fc must be declared and one and fc are initialized. This is because the propagation system is a general wiring-diagram system rather than an expression system. + +- **a.** Formulate and solve the multiple-dwelling problem using the amb evaluator of section 5.4. Instrument the system to determine the number of failures. How many failures does it take? +- **b.** Write a small compiler that converts constraints written as expressions into propagator diagram fragments. You will find + +that this is very easy. We made a first stab at this in exercise 7.1 on page 340. But here we really want to make a translator for code from section 5.4 to a propagator target. Demonstrate that your compilation gets the correct answer. + +**c.** How many failures are needed to solve the problem with the propagator diagram that you compiled into? If it takes more than about 200 failures you compiled into very bad code! + +# **Exercise 7.7: Card game puzzle revisited** + +Redo exercise 5.17 using propagators. + +# **Exercise 7.8: Type inference** + +In section 4.4.2 we built a type-inference engine as an example of the application of unification matching. In this exercise (which is really a substantial project) we implement type inference taking advantage of propagation. + +- **a.** Given a Scheme program, construct a propagation network with a cell for every locus that is useful to type. Each such cell will be the repository of the type information that will be accumulated about the type information at that locus in the program. Construct propagators that connect the cells and impose the type constraints implied by the program structure. Use unification match as the cell-merge operation. The unification may yield a contradiction if the program cannot be typed. +- **b.** There may be some cells of a program where a type is not sufficiently constrained by the types of the neighboring cells. However, propagation can be stimulated by dropping a general type variable into such a cell and allowing that variable to + +accumulate constraints by propagation. This is called "plunking." Try it. + +- **c.** In hard cases a type inference may require making guesses (using hypotheticals) and backtracking on discovery of contradictions. Show cases where this is necessary. +- **d.** Tracking of premises and reasons enables the construction of informative error comments, but to do this you must associate each program locus with its cell so that things that are learned by propagation can be related to the program being annotated. You may use any kind of "sticky note" you like to associate the locus bidirectionally with the cell. In any case, try to make good explanations about why a particular locus has the type that was determined, or why a program could not be consistently typed. +- **e.** Is this implementation of type inference practical? Why or why not? If not, how can it be improved? + +#### **A moral of this story** + +Solving combinatorial puzzles is fun, but it is not the real value of what we have done. Indeed, "SAT solvers" are important for solving real-world problems of this kind. But there is a deeper message here for the design of computational systems. By generalizing our programming from expression structures to wiring diagrams (which can be inconvenient—but that can be mitigated with compiling) we have made it possible to smoothly integrate nondeterministic choice into programs in a natural and efficient way. We can introduce hypotheticals, which provide alternative values supported by propositions that may be discarded without pain. This gives us the freedom to treat things like quadratic equations correctly. They really have two solutions, and any computation based on a choice of one solution may decide to reject it, while the other solution may lead, after a long computation, to an acceptable outcome. For example, given that p:sqrt computes the traditional positive square root of a real number, we can build a directional propagator + +constructor p:honest-sqrt, with input cell x∧2 and output cell x, that gives its users a (hidden) choice of square roots: + +``` +(define-p:prop (p:honest-sqrt (x∧2) (x)) + (let-cells (mul +x) + (p:amb mul '(-1 +1)) + (p:sqrt x∧2 +x) + (p:* mul +x x))) +``` + +What is important here is that such choices may be introduced without arranging that the enclosing machinery knows how to handle the ambiguity. For example, the constraint propagator that relates numbers to their squares can just use p:honest-sqrt: + +``` +(define-c:prop (c:square x x∧2) + (p:square x x∧2) + (p:honest-sqrt x∧2 x))) +``` + +# **7.6 Propagation enables degeneracy** + +In the design of any significant system there are many implementation plans proposed for every component at every level of detail. However, in the system that is finally delivered this diversity of plans is lost, and usually only one unified plan is adopted and implemented. As in an ecological system, the loss of diversity in the traditional engineering process has serious consequences. + +We rarely build degeneracy into programs, partly because it is expensive and partly because we traditionally have supplied no formal mechanisms for mediating its use. But the propagation idea provides a natural mechanism to incorporate degeneracy. The use of partial information structures in cells (introduced by Radul and Sussman [99]) allows multiple, perhaps overlapping, sources of information to be merged. We illustrated this with intervals in the stellar distance example in section 7.1. But there are many ways to merge partial information: partially specified symbolic expressions can be merged with unification, as shown in section 4.4.2. So the + +idea of partially specified information is not restricted to systems built with propagators, but if this is done in a propagator system, as proposed in exercise 7.8 on page 368, we have a paradigm for combining the contributions of multiple independent mechanisms. Similarly, we considered another idea from the AI problem-solving world for degenerate designs: goal-directed invocation. The idea is that instead of specifying "how" we want a goal accomplished, by naming a procedure to accomplish it, we specify "what" we want to accomplish, and we link procedures that can accomplish that goal with the goal. This linkage is often done with pattern matching, but that is accidental rather than essential. [17](#page-51-4) If there is more than one way to accomplish the goal, then the choice of an appropriate procedure is a choice point that can be registered for backtracking. But chronological backtracking, constrained by the control flow of an expression-oriented language, is extremely inefficient. We must break out of the expression-evaluation structure to make dependency-directed backtracking work well, and propagation is one way to go. We still have a potentially exponential search, but the combinatorics are significantly reduced by eliminating many bad choices using nogood sets learned from experience. + +Of course, besides using a backtracking search for choosing a particular way to accomplish a goal, there are other ways that the goal can invoke degenerate methods. For example, we may want to run several possible ways to solve a problem in parallel, choosing the one that terminates first. + +Suppose we have several independently implemented procedures all designed to solve the same (imprecisely specified) general class of problems. Assume for the moment that each design is reasonably competent and actually works correctly for most of the problems that might be encountered in actual operation. We know that we can make a more robust system by combining the given procedures into a larger system that independently invokes each of the given procedures and compares their results, choosing the best answer on every problem. If the combination has independent ways of determining which answers are acceptable we are in very good + +shape. But even if we are reduced to voting, we get a system that can reliably cover a larger space of solutions. Furthermore, if such a system can automatically log all cases where one of the designs fails, the operational feedback can be used to improve the performance of the procedure that failed. + +This degenerate design strategy can be used at every level of detail. Every component of each subsystem can itself be degenerately designed. If the components are shared among the subsystems, we get a controlled redundancy that is quite powerful. However, we can do even better. We can provide a mechanism for consistency checking of the intermediate results of the independently designed subsystems, even when no particular value in one subsystem exactly corresponds to a particular value in another subsystem. + +For a simple example, suppose we have two subsystems that are intended to deliver the same result, but computed in completely different ways. Assume that the designers agree that at some stage in one of the designs, the product of two of the variables in that design must be the same as the sum of two of the variables in the other design. [18](#page-52-0) There is no reason why this predicate should not be computed as soon as all of the four values it depends upon become available, thus providing consistency checking at run time and powerful debugging information to the designers. This can be arranged using a locally embedded constraint network. + +[1](#page-5-3) Constraint propagation was introduced by David Waltz in his doctoral thesis on the interpretation of line drawings [125]. Gerald Jay Sussman and Richard Stallman developed electrical circuit analysis tools based on constraint propagation [119, 114]. Eugene Freuder [39] transformed the constraint-programming ideas into a major intellectual endeavor, with its own journal [24]. Guy Steele's PhD thesis [116] showed how one could construct a programming language based on constraints. + +- [2](#page-6-1) See [127], page 71. +- [3](#page-7-0) There is also a "reason" for the value, indicated by the list beginning with because. In this case the value in the Vegaparallax-distance cell was derived by division of the contents of the AU cell by the contents of the t cell in the propagator made by c:parallax<->distance. The directional division propagator p:/ was part of the constraint propagator c:\*, which was itself part of the c:parallax<->distance constraint propagator. These reasons can get very verbose. We will omit the "because" part of the results of inquire when they are not helpful.By chasing these reasons recursively one can get a very verbose explanation of the derivation of a value. These reasons are the justifications we discussed in section 6.4.2. +- [4](#page-8-0) We are lying here! Actually the measurement of Gatewood and de Jonge [43] is a bit different. The center of their measurement was 130 milliarcseconds rather than the 131 that we quote here. We fudged this to make it possible to illustrate a computational point a bit later. +- [5](#page-9-0) Actually there are some problems with the Hipparcos data. Specifically, the distances measured by Hipparcos to some very bright clusters, such as the Pleiades, are apparently not consistent with better measurements made by very long baseline radio interferometry. But this discrepancy does not damage other Hipparcos measurements. +- [6](#page-9-1) This is why we fudged Gatewood and de Jonge's measurement. Their result would not overlap with the Hipparcos result if we quoted it correctly. In fact, the Hipparcos measurement would be entirely contained in the Gatewood and de Jonge error bars. +- [7](#page-10-0) This admittedly weird system descends from the work of the ancient Greek astronomer Hipparchus (c. 190 BCE – c. 120 BCE). He assigned a numerical brightness to each star in his catalog. He called the brightest stars *first magnitude*, less bright ones *second* + +- *magnitude*, and the dimmest *sixth magnitude*. The ESA's Hipparcos Space Astrometry Mission (see page 335) was named in honor of Hipparchus. +- [8](#page-10-1) This is a pretty ugly language, because we need to name and create cells for all of the intermediate parts of an expression. There are many ways to make this pretty, but the concepts are clearer if we start out with this crude but very concrete language of wiring diagrams. It is easy to write a small compiler that converts constraints written as algebraic expressions to propagator diagram fragments. (See exercise 7.1 on page 340 and exercise 7.6 on page 367.) +- [9](#page-19-0) This is an essential insight in Alexey Radul's PhD thesis [99, 100]. +- [10](#page-23-0) We are glossing over the serious problem of determining the equivalence of inexact quantities. No global notion of equivalence can represent the criteria for equivalence without additional local information. To address this problem we could provide a local equivalence predicate for each cell, with a default value for exact quantities. +- [11](#page-24-0) There is a very bad idea in our implementaton. A change of the belief status of a premise is implemented as a global operation this is never a good idea in a simulation of a parallel process! A better implementation would propagate the change of belief by local processes, similar to the way the values that they support are propagated. But we didn't do this—sorry! +- [12](#page-25-0) What is the best choice is actually a rather complex judgment. If one supported value is more specific than another, for example a narrower interval, this is a better choice. Also, if a value has fewer premises in its support set than an "equivalent" value, it is better because it requires fewer premises to be believed. This is implemented by the mechanism of merging value sets, which we will describe in section 7.4.3. + +- [13](#page-34-0) Dependency-directed backtracking was first introduced by Richard Stallman and Gerald Jay Sussman in the context of electrical circuit analysis [114]. A very similar technique, "clausal learning," was developed in the context of logic by Karl Lieberherr [84]. Clausal learning is now used in the best SAT solvers. Ramin Zabih, David McAllester, and David Chapman showed one way to build this technique into Lisp code [132]. Guy Steele showed an elegant way to incorporate dependency-directed backtracking into a constraint language [116]. Building on the work of Jon Doyle [30] and David McAllester [88], Ken Forbus and Johan deKleer elaborated the theory and practice of dependencies and "truth-maintenance systems" [36], a general way to think about dependencies and backtracking. The way we implement dependency-directed backtracking in this book was developed by Alexey Radul and Gerald Jay Sussman [99, 100]. +- [14](#page-36-0) This use of the procedure pairwise-union implements the *cut* rule of logic, which is a generalization of *modus ponens*. In propositional logic the cut rule is written (*A* ∨ *B*) ∧ (¬*B* ∨ *C*) ⊦ (*A* ∨ *C*). This rule, combined with unification (section 4.4), is the basis of the famous resolution theorem proving algorithm invented by Robinson [104]. +- [15](#page-42-0) The precise number of failed choices of assignments is very dependent on the details of the computation. In this problem the number of failed choices can be anywhere from about 60 to about 200, depending on the order of propagator activations. But for this formulation of this problem the average number of failures is about 110. +- [16](#page-42-1) This puzzle is taken from a booklet called *Problematical Recreations*, published in the 1960s by *Litton Industries*, where it is attributed to the *Kansas State Engineer.* +- [17](#page-47-0) *Pattern-directed invocation* was introduced by Carl Hewitt in PLANNER [56] and by Alain Colmerauer in Prolog [78]. This idea has spread to many other systems and languages. + +[18](#page-48-1) This is actually a real case. In variational mechanics the sum of a Lagrangian for a system and the Hamiltonian related to it by a Legendre transformation is the inner product of the generalized momentum 1-form and the generalized velocity vector [121]. \ No newline at end of file diff --git a/raw/book/설계원칙-394-446_images/_page_15_Figure_4.jpeg b/raw/book/설계원칙-394-446_images/_page_15_Figure_4.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c298a2443b2f2ce72b1380e5d067efd90e4f38b GIT binary patch literal 22603 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

    Bw~peBWARbuUTr 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 CLmuh? literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-394-446_images/_page_15_Picture_0.jpeg b/raw/book/설계원칙-394-446_images/_page_15_Picture_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..06f705b2bb43feb344c2f44f6272273c1427c7de GIT binary patch literal 9783 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 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-394-446_images/_page_2_Picture_0.jpeg b/raw/book/설계원칙-394-446_images/_page_2_Picture_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0d712584a43ad069fd7ac53e115cb220235e910e GIT binary patch literal 9782 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 F{|(jVMfU&z literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-394-446_images/_page_4_Figure_0.jpeg b/raw/book/설계원칙-394-446_images/_page_4_Figure_0.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7c9f90b53af6b42b0afc7271b1d9f36ea6d4582b GIT binary patch literal 20548 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 literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-394-446_images/_page_5_Picture_5.jpeg b/raw/book/설계원칙-394-446_images/_page_5_Picture_5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0cb42f9cc8b73a7cefd14d67f6d44d8438876862 GIT binary patch literal 28503 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 rhz0nY2%6#Qm{HJ!}ba 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 WgoEJWzbZ!l|9$NL+qr@szyCj;4=;cK literal 0 HcmV?d00001 diff --git a/raw/book/설계원칙-447-475.md b/raw/book/설계원칙-447-475.md new file mode 100644 index 0000000..ed11745 --- /dev/null +++ b/raw/book/설계원칙-447-475.md @@ -0,0 +1,730 @@ +# **Epilogue** + +Serious engineering is only a few thousand years old. Our attempts at deliberately producing very complex robust systems are immature at best. We have yet to glean the lessons that biological evolution has learned over the last few billion years. + +We have been more concerned with efficiency and correctness than with the kind of robustness of biological systems that comes from optimizing evolvability, flexibility, and resistance to attack. This is sensible for developing mission-critical systems that have barely enough resources to perform their function. However, the rapid advance of microelectronics has alleviated the resource problem for most applications. Our increasing dependence on computational and communications infrastructure, and the development of ever more sophisticated attacks on that infrastructure, make it imperative that we turn our attention to robustness. + +We are not advocating biomimetics; but observations of biological systems give us hints about how to incorporate powerful principles of robustness into our engineering practice. Many of these principles are in direct conflict with the established practices of optimization of efficiency and of the ability to prove correctness. In this book we deliberately violate these established practices to explore the possibilities of optimizing for flexibility. A motivation of our approach is the observation that most systems that have survived the test of time are built as an assembly of domain-specific languages, each of which is appropriate to make some parts of the system easy to construct. + +As part of the effort to build artificially intelligent symbolic systems, the AI community has incidentally developed technological tools that can be used to support principles of flexible and robust design. For example, rather than thinking of backtracking as a method of organizing search, we can employ it to increase the general applicability of components in a complex system that organizes itself to meet externally imposed constraints. We believe that by pursuing this new synthesis we will obtain better hardware and software systems. + +We started out in chapter 2 with some rather unobjectionable techniques that are universally applicable. We introduced the strategy of building systems of combinators—libraries of parametric parts that have standardized interfaces. Such parts can be combined in many ways to meet a great variety of needs. We demonstrated how this idea can be used to simplify the construction of a language of regular-expression matchers. We introduced systems of wrappers that allow us to adapt parts to applications with different standards than the parts were built to, and we used this to make a language of unit-conversion wrappers. We progressed to build a rule interpreter for a language to express the rules of board games like checkers. + +In chapter 3 we embarked on an exciting and dangerous adventure: we investigated what can be done if we are allowed to modulate the meanings of the primitive procedures of a language. We extended arithmetic to handle symbolic expressions and functions, as well as numbers. We created extensible generic procedures and used the extension mechanism to integrate forwardmode automatic differentiation into our arithmetic. This kind of extension is dangerous, but if we are careful, we can make old programs have new abilities without losing their old abilities. To make this strategy efficient and even more powerful, we proceeded to explore user-defined types, with declarable subtype relationships, and we used that to make a simple but easily extensible adventure game. + +Pattern matching and pattern-directed invocation, introduced in chapter 4, are crucial techniques for erecting domain-specific languages. We started with term-rewriting rules for algebraic + +simplification. We then showed an elegant strategy for compiling patterns into a composition of elementary pattern matchers in a system of pattern-matching combinators. We then expanded our pattern-matching tools to allow pattern variables on both sides of a match, implementing unification, which we then used to make an elementary type-inference system. Finally, we built matchers that match arbitrary graphs, not just expression trees, and used graphs and graph matching to express the rules for moves in chess in an elegant manner. + +Because all sane computer languages are universal, programmers do not have an excuse that a solution cannot be expressed in some language. If seriously pressed, good programmers can make an interpreter or compiler for any language they please in any language they are stuck with. This is not very hard, but it is probably the most powerful move a programmer can make. In chapter 5 we showed how to make increasingly powerful languages by interpretation and compilation. We started with a simple applicative-order interpreter for a Scheme-like language. For extensibility, the interpreter was built on generic procedures. We then extended it to allow procedure definitions to declare lazy formal parameters. Next we compiled the language to a combination of execution procedures—a system of combinators. We then added a model of nondeterministic evaluation, with the amb operator. Finally, we showed how by exposing the underlying continuations we could arrange to get the power of amb in the underlying Scheme system. In chapter 6 we began to explore multilayer computations, based on a novel mechanism closely related to generic procedures. For example, we modified our arithmetic so that a program that computes numerical results from numerical arguments could be extended, without modification, to compute the same results, augmented with units. The units of the result are automatically derived from the units of the inputs, and combinations are checked for consistent units: adding 5 kilograms to 2 meters will signal an error. We used the same layering mechanism to augment programs to carry dependencies, so that a result automatically has reference to the sources of the ingredients that went into making that result. + +The propagator model of chapter 7 is really a way of thinking about the plumbing of large systems. Although, in the examples we show in this chapter, the propagators are all simple arithmetic functions or relations, the idea is far more general. A propagator could be hardware or software. It could be a simple function or a huge computer doing an enormous crunch. If it is software, it could be written in any language. Indeed, a system of propagators does not have to be homogeneous. Different propagators may be constructed differently. Cells may be specialized to hold different kinds of information and they may merge information in their own favorite way. The communication between propagators and cells may be signals on a chip or on a global network. All that matters is the protocol for a propagator to query a cell and to add information to a cell. + +In this book we introduced many programming ideas. It is now up to you to evaluate them and perhaps apply them. + +# **A** + +# **Appendix: Supporting Software** + +All of the code shown in this book and the infrastructure code that supports it can be downloaded as an archive file from + +The archive is organized as a directory tree, where each subdirectory approximately corresponds with a section of this book. The software runs in MIT/GNU Scheme version 10.1.10 or later, which can be obtained from + +The software uses a number of features specific to the MIT/GNU implementation, so it won't work with other distributions. It should be possible to port it to another distribution, but we have not tried this and it is likely to require some work. Because this is free software (licensed under the GPL) you may modify it and distribute it to others. + +The software archive is a tar file called sdf.tgz, which can be unpacked using the command + +``` +tar xf .../sdf.tgz +``` + +This tar command produces a directory sdf in whatever directory the tar command is executed in. + +The primary interface to the software archive is a management program, which is distributed with the archive. To use this program, start MIT/GNU Scheme and load it like this: + +``` +(load ".../sdf/manager/load") +``` + +where .../ refers to the directory in which the archive was unpacked. The manager creates a single definition in the global + +environment, called manage. Once loaded, it's not necessary to reload the manager unless a new instance of Scheme is started. + +Suppose you are working on section 4.2 "Term rewriting," and you'd like to play with the software or work on an exercise. The loader for code in that section is stored in the subdirectory .../sdf/term-rewriting, along with files that are specific to that section. But you do not need to know how the loader works. (Of course, you may read the manager code. It is pretty interesting.) + +The manage command + +``` +(manage 'new-environment 'term-rewriting) +``` + +will create a new top-level environment, load all of the necessary files for that section, and move the read-eval-print loop into that environment. After you are done with that section, you can use the manage command to load the software for another section by replacing term-rewriting with the name corresponding to the new section. + +Usually, the name of a subdirectory can be used as an argument to (manage 'new-environment ...). When used in this context, the subdirectory name is called a *flavor*. However, some of the subdirectories have multiple flavors, and in those cases the available flavor names differ from the subdirectory names. + +The correspondence between sections of the book and subdirectories/flavors in the archive can be found in the file + +``` +.../sdf/manager/sections.scm +``` + +In addition, there are two special subdirectories: common holds shared files that are used extensively; and manager holds the implementation of manage. + +The software management program manage has many other useful abilities. Among them are managing working environments by name, finding the files that define a name and those that refer to it, and running unit tests. For more information refer to the documentation that is included in the manager subdirectory. + +Using the software may require additional steps that are not spelled out in the book text, such as initialization. Every subdirectory contains tests: any file named test-*FOO*.scm is a "standard" test, using a testing framework similar to those of other programming languages. Additionally, the load-spec files in each subdirectory may contain references to tests, marked with the inline-test? symbol, that use a different testing framework that is similar to read-eval-print loop transcripts. Look there for examples of how to run the programs. + +# **Appendix: Scheme** + +Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suffice to form a practical and efficient programming language that is flexible enough to support most of the major programming paradigms in use today. + +*IEEE Standard for the Scheme Programming Language* [61], p. 3 + +Here we give an elementary introduction to the Scheme dialect of Lisp. For a longer introduction see the textbook *Structure and Interpretation of Computer Programs (SICP)* [1]. + +For a more precise explanation of the language see the IEEE standard [61] and the Seventh *Revised Report on the Algorithmic Language Scheme (R7RS)* [109] + +Some of the programs in this book depend on nonstandard features in MIT/GNU Scheme; for documentation of this system see the *MIT/GNU Scheme Reference Manual* [51]. Also, for Scheme features that are documented elsewhere the index to the Reference Manual provides pointers to the appropriate documents. + +# **B.1 Essential Scheme** + +Scheme is a simple programming language based on expressions. An expression names a value. For example, the numeral 3.14 names an approximation to a familiar number, and the numeral 22/7 names another approximation to it. There are primitive expressions, such as numerals, that we directly recognize, and there are compound expressions of several kinds. + +Compound expressions are delimited by parentheses. Those that start with distinguished keywords, such as if, are called *special forms*. Those that are not special forms, called *combinations*, denote applications of procedures to arguments. + +### **Combinations** + +A *combination*—also called a *procedure application*—is a sequence of expressions delimited by parentheses: + +``` +(operator operand-1 ... operand-n) +``` + +The first subexpression in a combination, called the *operator*, is taken to name a procedure, and the rest of the subexpressions, called the *operands*, are taken to name the arguments to that procedure. The value returned by the procedure when applied to the given arguments is the value named by the combination. For example, + +``` +(+ 1 2.14) +3.14 +(+ 1 (* 2 1.07)) +3.14 +``` + +are both combinations that name the same number as the numeral 3.14. [1](#page-26-0) In these cases the symbols + and \* name procedures that add and multiply, respectively. If we replace any subexpression of any expression with an expression that names the same thing as the + +original subexpression, the thing named by the overall expression remains unchanged. + +Note that in Scheme every parenthesis is essential: you cannot add extra parentheses or remove any. + +### **Lambda expressions** + +Just as we use numerals to name numbers, we use lambda expressions to name procedures. [2](#page-26-1) For example, the procedure that squares its input can be written: + +``` +(lambda (x) (* x x)) +``` + +This expression can be read: "The procedure of one argument, *x*, that multiplies *x* by *x*." Of course, we can use this expression in any context where a procedure is needed. For example, + +``` +((lambda (x) (* x x)) 4) +16 +``` + +The general form of a lambda expression is + +``` +(lambda formal-parameters body) +``` + +where *formal-parameters* is (usually) a parenthesized list of symbols that will be the names of the formal parameters of the procedure. When the procedure is applied to arguments, the formal parameters will have the arguments as their values. The *body* is an expression that may refer to the formal parameters. The value of a procedure application is the value of the body of the procedure with the arguments substituted for the formal parameters. [3](#page-27-0) + +In the example shown above, the symbol x is the only formal parameter of the procedure named by (lambda (x) (\* x x)). That procedure is applied to the value of the numeral 4, so in the body, (\* x x), the symbol x has the value 4, and the value of the combination ((lambda (x) (\* x x)) 4) is 16. + +We said "usually" above because there are exceptions. Some procedures, such as the procedure that multiplies numbers, named + +by the symbol \*, can take an indefinite number of arguments. We will explain how to do that later (on page 389). + +### **Definitions** + +We can use the define special form to give a name to any object. We say that the name identifies a *variable* whose value is the object. For example, if we make the definitions + +``` +(define pi 3.141592653589793) +(define square (lambda (x) (* x x))) +``` + +we can then use the symbols pi and square wherever the numeral or the lambda expression could appear. For example, the area of the surface of a sphere of radius 5 is + +``` +(* 4 pi (square 5)) +314.1592653589793 +``` + +Procedure definitions may be expressed more conveniently using "syntactic sugar." The squaring procedure may be defined + +``` +(define (square x) (* x x)) +``` + +which we may read: "To square *x* multiply *x* by *x*." + +In Scheme, procedures are *first-class* objects: they may be passed as arguments, returned as values, and incorporated into data structures. For example, it is possible to make a procedure that implements the mathematical notion of the composition of two functions: [4](#page-27-1) + +``` +(define compose + (lambda (f g) + (lambda (x) + (f (g x))))) +((compose square sin) 2) +.826821810431806 +(square (sin 2)) +.826821810431806 +``` + +One thing to notice is that the values of f and g in the returned procedure, (lambda (x) (f (g x))), are the values of the formal parameters of the outer procedure, (lambda (f g) ...). This is the essence of the lexical scoping discipline of Scheme. The value of any variable is obtained by finding its binding in the lexically apparent context. There is an implicit context for all the variables defined globally by the system. (For example, + is globally bound by the system to the procedure that adds numbers.) + +Using the syntactic sugar shown above for square, we can write the definition of compose more conveniently: + +``` +(define (compose f g) + (lambda (x) + (f (g x)))) +``` + +In MIT/GNU Scheme we can use the sugar recursively, to write: + +``` +(define ((compose f g) x) + (f (g x))) +``` + +Sometimes it is advantageous to make a definition local to another definition. For example, we may define compose as follows: + +``` +(define (compose f g) + (define (fog x) + (f (g x))) + fog) +``` + +The name fog is not defined outside the definition of compose, so it is not particularly useful in this case, but larger chunks of code are often easier to read if internal pieces are given names. Internal definitions must always precede any expressions that are not definitions in the body of the procedure. + +### **Conditionals** + +Conditional expressions may be used to choose among several expressions to produce a value. For example, a procedure that implements the absolute value function may be written: + +``` +(define (abs x) + (cond ((< x 0) (- x)) + ((= x 0) x) + ((> x 0) x))) +``` + +The conditional cond takes a number of *clauses*. Each clause has a *predicate expression*, which may be either true or false, and a *consequent expression*. The value of the cond expression is the value of the consequent expression of the first clause for which the corresponding predicate expression is true. The general form of a conditional expression is + +``` +(cond (predicate-1 consequent-1) + ... + (prredicate-n consequent-n)) +``` + +For convenience there is a special keyword else that can be used as the predicate in the last clause of a cond. + +The if special form provides another way to make a conditional when there is only a binary choice to be made. For example, because we have to do something special only when the argument is negative, we could have defined abs as: + +``` +(define (abs x) + (if (< x 0) + (- x) + x)) +``` + +The general form of an if expression is + +``` +(if predicate consequent alternative) +``` + +If the *predicate* is true the value of the if expression is the value of the *consequent*, otherwise it is the value of the *alternative*. + +# **Recursive procedures** + +Given conditionals and definitions, we can write recursive procedures. For example, to compute the *n*th factorial number we may write: + +``` +(define (factorial n) + (if (= n 0) + 1 + (* n (factorial (- n 1))))) +(factorial 6) +720 +(factorial 40) +815915283247897734345611269596115894272000000000 +``` + +### **Local names** + +A let expression is used to give names to objects in a local context. For example, + +``` +(define (f radius) + (let ((area (* 4 pi (square radius))) + (volume (* 4/3 pi (cube radius)))) + (/ volume area))) +(f 3) +1 +``` + +The general form of a let expression is + +``` +(let ((variable-1 expression-1) + ... + (variable-n expression-n)) + body) +``` + +The value of the let expression is the value of the *body* expression in the context where the variables *variable-i* have the values of the expressions *expression-i*. The expressions *expression-i* may not refer to any of the variables *variable-j* given values in the let expression. + +A let\* expression is the same as a let expression except that an expression *expression-i* may refer to variables *variable-j* given values earlier in the let\* expression. + +A slight variant of the let expression provides a convenient way to write a loop. We can write a procedure that implements an alternative algorithm for computing factorials as follows: + +``` +(define (factorial n) + (let factlp ((count 1) (answer 1)) + (if (> count n) + answer + (factlp (+ count 1) (* count answer))))) +(factorial 6) +720 +``` + +Here, the symbol factlp following the let is locally defined to be a procedure that has the variables count and answer as its formal parameters. It is called the first time with 1 and 1 as arguments, initializing the loop. Whenever the procedure named factlp is called later, these variables get new values that are the values of the operand expressions (+ count 1) and (\* count answer). + +An equivalent way to express this procedure has an explicitly defined internal procedure: + +``` +(define (factorial n) + (define (factlp count answer) + (if (> count n) + answer + (factlp (+ count 1) (* count answer)))) + (factlp 1 1)) +``` + +The procedure factlp is defined locally; it exists only in the body of factorial. Because factlp is lexically enclosed in the definition of factorial, the value of n in its body is the value of the formal parameter of factorial. + +## **Compound data—lists, vectors, and records** + +Data can be glued together to form compound data structures. A *list* is a data structure in which the elements are linked sequentially. A *vector* is a data structure in which the elements are packed in a linear array. New elements can be added to lists, but to access the *n*th element of a list takes computing time proportional to *n*. By contrast, a vector is of fixed length, and its elements can be accessed in constant time. A *record* is similar to a vector, except that its fields are addressed by names rather than index numbers. Records also + +provide new data types, which are distinguishable by type predicates and are guaranteed to be different from other types. + +Compound data objects are constructed from components by procedures called *constructors* and the components are accessed by *selectors*. + +The procedure list is the constructor for lists. The predicate list? is true of any list, and false of all other types of data. [5](#page-27-2) For example, + +``` +(define a-list (list 6 946 8 356 12 620)) +a-list +(6 946 8 356 12 620) +(list? a-list) +#t +(list? 3) +#f +``` + +Here #t and #f are the printed representations of the boolean values true and false. [6](#page-27-3) + +Lists are built from pairs. A *pair* is made using the constructor cons. The selectors for the two components of the pair are car and cdr (pronounced "could-er"). [7](#page-27-4) + +``` +(define a-pair (cons 1 2)) +a-pair +(1 . 2) +(car a-pair) +1 +(cdr a-pair) +2 +``` + +A list is a chain of pairs, such that the car of each pair is the list element and the cdr of each pair is the next pair, except for the last cdr, which is a distinguishable value called the empty list and written (). Thus, + +``` +(car a-list) +6 +(cdr a-list) +(946 8 356 12 620) +(car (cdr a-list)) +946 +(define another-list + (cons 32 (cdr a-list))) +another-list +(32 946 8 356 12 620) +(car (cdr another-list)) +946 +``` + +The lists a-list and another-list share their tail (their cdr). + +The predicate pair? is true of pairs and false of all other types of data. The predicate null? is true only of the empty list. + +Vectors are simpler than lists. There is a constructor vector that can be used to make vectors and a selector vector-ref for accessing the elements of a vector. In Scheme all selectors that use a numerical index are zero-based: + +``` +(define a-vector + (vector 37 63 49 21 88 56)) +a-vector +#(37 63 49 21 88 56) +(vector-ref a-vector 3) +21 +(vector-ref a-vector 0) +37 +``` + +The printed representation of a vector is distinguished from the printed representation of a list by the character # before the initial parenthesis. + +There is a predicate vector? that is true of vectors and false for all other types of data. + +Scheme provides a numerical selector for the elements of a list, list-ref, analogous to the selector for vectors: + +``` +(list-ref a-list 3) +356 +(list-ref a-list 0) +6 +``` + +Records are more involved, as they must be declared before they can be constructed. A simple record declaration might be + +``` +(define-record-type point + (make-point x y) + point? + (x point-x) + (y point-y)) +``` + +After this declaration, we can make and use points: + +``` +(define p (make-point 1 2)) +(point? p) +#t +(point-x p) +1 +(point-y p) +2 +``` + +The elements of lists, vectors, and records may be any kind of data, including numbers, procedures, lists, vectors, and records. Numerous other procedures for manipulating lists, vectors, and records can be found in the Scheme online documentation. + +## **Procedures with an indefinite number of arguments** + +The procedures that we have seen are specified with a list of formal parameters that are bound to the arguments that the procedure is called with. However, there are many procedures that take an indefinite number of arguments. For example, the arithmetic procedure that multiplies numbers can take any number of + +arguments. To define such a procedure we specify the formal parameters as a single symbol rather than a list of symbols. The single symbol is then bound to a list of the arguments that the procedure is called with. For example, given a binary multiplier \*:binary we can write + +``` +(define * (lambda args (accumulate *:binary 1 args))) +where accumulate is just +(define (accumulate proc initial lst) + (if (null? lst) + initial + (proc (car lst) + (accumulate proc initial (cdr lst))))) +``` + +Sometimes we want a procedure that takes some named arguments and an indefinite number of others. In a procedure definition a parameter list that has a dot before the last parameter name (called *dotted-tail notation*) indicates that the parameters before the dot will be bound to the initial arguments, and the final parameter will be bound to a list of any remaining arguments. In the example of \* above there are no initial arguments, so the value of args is a list of all the arguments. Thus, alternatively, we could define \* as: + +``` +(define (* . args) (accumulate *:binary 1 args)) +``` + +The procedure named by - is more interesting, as it requires at least one argument: when given one argument - negates it; when given more than one argument it subtracts the rest from the first: + +``` +(define (- x . ys) + (if (null? ys) ; Only one argument? + (-:unary x) + (-:binary x (accumulate +:binary 0 ys)))) +``` + +### This can also be written + +``` +(define - + (lambda (x . ys) + (if (null? ys) +``` + +``` +(-:unary x) +(-:binary x (accumulate +:binary 0 ys))))) +``` + +Parameters like args and ys in the examples above are called *rest parameters* because they are bound to the rest of the arguments. + +## **Symbols** + +Symbols are a very important kind of primitive data type that we use to make programs and algebraic expressions. You probably have noticed that Scheme programs look just like lists. In fact, they *are* lists. Some of the elements of the lists that make up programs are symbols, such as + and vector. [8](#page-27-5) + +If we are to make programs that can manipulate programs, we need to be able to write an expression that names such a symbol. This is accomplished by the mechanism of *quotation*. The name of the symbol + is the expression '+, and in general the name of an expression is the expression preceded by a single quote character. Thus the name of the expression (+ 3 a) is '(+ 3 a). + +We can test if two symbols are identical by using the predicate eq?. For example, we can write a program to determine if an expression is a sum: + +``` +(define (sum? expression) + (and (pair? expression) + (eq? (car expression) '+))) +(sum? '(+ 3 a)) +#t +(sum? '(* 3 a)) +#f +``` + +Consider what would happen if we left out the quote in the expression (sum? '(+ 3 a)). If the variable a had the value 4, we would be asking if 7 is a sum. But what we wanted to know was whether the expression (+ 3 a) is a sum. That is why we need the quote. + +## **Backquote** + +To manipulate patterns and other forms of list-based syntax, it is often useful to intersperse quoted and evaluated parts in the same expression. Lisp systems provide a mechanism called *quasiquotation* that makes this easy. + +Just as we use the apostrophe character to indicate regular quotation, we use the backquote character to indicate quasiquotation. [9](#page-27-6) We specify such a partially quoted expression as a list in which the parts to be evaluated are prefixed with the comma character. For example, + +``` +'(a b ,(+ 20 3) d) +(a b 23 d) +``` + +The backquote mechanism also provides for "splicing" into a list expression: an evaluated subexpression produces a list, which is then spliced into the enclosing list. For example, + +``` +'(a b ,@(list (+ 20 3) (- 20 3)) d) +(a b 23 17 d) +``` + +Consult the Scheme Report [109] for a more detailed explanation of quasiquotation. + +## **Effects** + +Sometimes we need to perform an action, such as plotting a point or printing a value, in the process of a computation. Such an action is called an *effect*. [10](#page-27-7) For example, to see in more detail how the factorial program computes its answer, we can interpolate a writeline statement in the body of the factlp internal procedure to print a list of the count and the answer for each iteration: + +``` +(define (factorial n) + (let factlp ((count 1) (answer 1)) + (write-line (list count answer)) + (if (> count n) +``` + +``` +answer +(factlp (+ count 1) (* count answer))))) +``` + +When we call the modified factorial procedure we can watch the counter being incremented and the answer being built: + +``` +(factorial 6) +(1 1) +(2 1) +(3 2) +(4 6) +(5 24) +(6 120) +(7 720) +720 +``` + +The body of every procedure or let, as well as the consequent of every cond clause, allows statements that have effects to be used. The effect statement generally has no useful value. The final expression in the body or clause produces the value that is returned. In this example the if expression produces the value of the factorial. + +# **Assignments** + +Effects like printing a value or plotting a point are pretty benign, but there are more powerful (and thus dangerous) effects, called *assignments*. An assignment *changes* the value of a variable or an entry in a data structure. Almost everything we are computing is a mathematical function: for a particular input it always produces the same result. However, with assignment we can make objects that change their behavior as they are used. For example, we can use set! to make a device that increments a count every time we call it: [11](#page-28-0) + +``` +(define (make-counter) + (let ((count 0)) + (lambda () + (set! count (+ count 1)) + count))) +``` + +## Let's make two counters: + +``` +(define c1 (make-counter)) +(define c2 (make-counter)) +``` + +These two counters have independent local state. Calling a counter causes it to increment its local state variable, count, and return its value. + +``` +(c1) +1 +(c1) +2 +(c2) +1 +(c1) +3 +(c2) +2 +``` + +For assigning to the elements of a data structure, such as a pair, a list, or a vector, Scheme provides: + +``` +(set-car! pair new-value) +(set-cdr! pair new-value) +(list-set! list index new-value) +(vector-set! vector index new-value) +``` + +A record may be defined to allow assignments to its fields (compare page 388: + +``` +(define-record-type point + (make-point x y) + point? + (x point-x set-x!) + (y point-y set-y!)) +(define p (make-point 1 2)) +(point-x p) +``` + +``` +1 +(point-y p) +2 +(set-x! p 3) +(point-x p) +3 +(point-y p) +2 +``` + +In general, it is good practice to avoid assignments when possible, but if you need them they are available. [12](#page-28-1) + +# **B.2 More advanced stuff** + +Scheme provides many more powerful features, but we won't try to describe them here. For example, you will probably want to know about hash tables. In general, the best sources are the + +*Revised Report on the Algorithmic Language Scheme (R7RS)* [109] and the *MIT/GNU Scheme Reference Manual* [51]. But here are two fairly complex features that you may need to reference while reading this book: + +### **Dynamic binding** + +We sometimes want to specify the way in which some evaluation or action will be accomplished—for example, to specify the radix to use when printing a number. To do this we use an object called a *parameter*. + +For example, the Scheme procedure number->string produces a character string that represents a number in a given radix: + +``` +(number->string 100 2) +"1100100" +(number->string 100 16) +"64" +``` + +Suppose we want to use number->string in many places in a complex program that we run by calling myprog, but we want to be able to control the radix used when the program is run. We can accomplish this by making a parameter radix with the default value 10: + +``` +(define radix (make-parameter 10)) +``` + +The value of a parameter is obtained by calling the parameter with no arguments: + +``` +(radix) +10 +``` + +We define a specialized version of number->string to use instead of number->string: + +``` +(define (number->string-radix number) + (number->string number (radix))) +``` + +In an execution of (myprog), every call to number->string-radix will produce a decimal string, because the default value of (radix) is 10. However, we can wrap our program with parameterize to change the execution to use another radix: + +``` +(parameterize ((radix 2)) + (myprog)) +``` + +The syntax of parameterize is the same as the syntax of let, but it can be used only for parameters created by make-parameter. + +### **Bundles** + +MIT/GNU Scheme provides a simple mechanism for building a collection of related procedures with shared state: a *bundle*. A bundle is a procedure that delegates to a collection of named procedures: the first argument to the bundle is the name of the delegate to use, and the rest of the arguments are passed to the specified delegate. This is similar to the way that some objectoriented languages work, but much simpler, and without classes or inheritance. + +A bundle is sometimes called a *message-accepting procedure*, where the message type is the delegate name and the message body is the arguments. [13](#page-28-2) This emphasizes that the bundle supports a message-passing protocol and can be thought of as a node in a communications network. + +Here is a simple example: + +``` +(define (make-point x y) + (define (get-x) x) + (define (get-y) y) + (define (set-x! new-x) (set! x new-x)) + (define (set-y! new-y) (set! y new-y)) + (bundle point? get-x get-y set-x! set-y!)) +``` + +The procedure make-point defines four internal procedures, which share the state variables x and y. The bundle macro creates a bundle procedure, for which those procedures are the delegates. + +The first argument to the bundle macro is a predicate, which is created with make-bundle-predicate. The bundle that is created will satisfy this predicate: + +``` +(define point? (make-bundle-predicate 'point)) +(define p1 (make-point 3 4)) +(define p2 (make-point -1 1)) +(point? p1) +#t +(point? p2) +#t +(point? (lambda (x) x)) +#f +``` + +The argument to make-bundle-predicate is a symbol that is used to identify the predicate when debugging. + +If a predicate is not needed, bundle alternatively accepts #f as a first argument. In that case there will be no way to distinguish the created bundle procedure from other procedures. + +The remaining arguments to the bundle macro are the names of the delegate procedures: get-x, get-y, set-x!, and set-y!. These names are looked up in the lexical environment of the macro to get the corresponding delegate procedures. A bundle procedure is then created, containing an association from each name to its delegate procedure. + +When the resulting bundle procedure is called, its first argument is a symbol that must be the name of one of the delegate procedures. The association is used to select the named delegate procedure, which is then called with the bundle procedure's remaining arguments as its arguments. + +It is easier to use a bundle than to describe it: + +``` +(p1 'get-x) +3 +(p1 'get-y) +4 +(p2 'get-x) +-1 +(p2 'get-y) +1 +(p1 'set-x! 5) +(p1 'get-x) +5 +(p2 'get-x) +-1 +``` + +- [1](#page-8-0) In examples we show the value that would be printed by the Scheme system using *slanted* characters following the input expression. +- [2](#page-9-0) The logician Alonzo Church [16] invented *λ* notation to allow the specification of an anonymous function of a named parameter: *λx*[expression in *x*]. This is read, "That function of one argument whose value is obtained by substituting the argument for *x* in the indicated expression." + +- [3](#page-9-1) We say that the formal parameters are *bound* to the arguments, and the *scope* of the binding is the body of the procedure. +- [4](#page-10-0) The examples are indented to help with readability. Scheme does not care about extra white space, so we may add as much as we please to make things easier to read. +- [5](#page-15-0) A *predicate* is a procedure that returns true or false. By Scheme cultural convention, we usually give a predicate a name ending with a question mark (?), except for the elementary arithmetic comparison predicates: =, <, >, <=, and >=. This is just a stylistic convention. To Scheme the question mark is just an ordinary character. +- [6](#page-15-1) It is convenient, but irritating to some, that the conditional expressions (if and cond) treat any predicate value that is not explicitly #f as true. +- [7](#page-15-2) These names are accidents of history. They stand for "Contents of the Address part of Register" and "Contents of the Decrement part of Register" of the IBM 704 computer, which was used for the first implementation of Lisp in the late 1950s. Scheme is a dialect of Lisp. +- [8](#page-19-0) A symbol may have any number of characters. A symbol may not normally contain whitespace or delimiter characters, such as parentheses, brackets, quotation marks, comma, or #; but there are special notations that allow any characters to be included in a symbol's name. +- [9](#page-20-0) On an American keyboard the backquote character "'" is the lowercase character on the key that has the tilde character "∼" as the uppercase character. +- [10](#page-20-1) This is computer-science jargon. An effect is a change to something. For example, write-line changes the display by printing something to the display. + +- [11](#page-21-0) It is another cultural convention that we terminate the name of a procedure that has "side effects" with an exclamation point (!). This warns the reader that changing the order of effects may change the results of running the program. +- [12](#page-23-0) The discipline of programming without assignments is called *functional programming*. Functional programs are generally easier to understand and have fewer bugs than *imperative programs*. +- [13](#page-25-0) This terminology dates back to the ACTOR framework [58] and the Smalltalk programming language [46]. \ No newline at end of file diff --git a/raw/book/설계원칙-476-541.md b/raw/book/설계원칙-476-541.md new file mode 100644 index 0000000..d38eddf --- /dev/null +++ b/raw/book/설계원칙-476-541.md @@ -0,0 +1,1594 @@ +# **References** + +- [1]Harold Abelson and Gerald Jay Sussman with Julie Sussman, *Structure and Interpretation of Computer Programs* (2nd ed.). Cambridge, MA: MIT Press, 1996. +- [2]Harold Abelson, Don Allen, Daniel Coore, Chris Hanson, George Homsy, Thomas F. Knight Jr., Radhika Nagpal, Erik Rauch, Gerald Jay Sussman, and Ron Weiss; "Amorphous Computing," in *Communications of the ACM*, 43(5) (May 2000): 74–82. +- [3]Lee Altenberg; "The Evolution of Evolvability in Genetic Programming," in *Advances in Genetic Programming*, ed. Kenneth E. Kinnear Jr., 47–74. Cambridge, MA: MIT Press, 1994. +- [4]*The ARRL Handbook for Radio Amateurs*, American Radio Relay League, Newington, CT (annual). +- [5]Jean-Paul Arcangeli and Christian Pomian; "Principles of Plasma Pattern and Alternative Structure Compilation," in *Theoretical Computer Science*, 71 (1990): 177–191. +- [6]Franz Baader and Wayne Snyder; "Unification theory," in *Handbook of Automated Reasoning*, ed. Alan Robinson and Andrei Voronkov. Elsevier Science Publishers B.V., 2001. +- [7]Jonathan B.L. Bard; *Morphogenesis*, Cambridge: Cambridge University Press, 1990. + +- [8]Alan Bawden and Jonathan Rees; "Syntactic closures," in *Proc. Lisp and Functional Programming* (1988). +- [9]Jacob Beal; *Generating Communications Systems Through Shared Context*, S.M. thesis, MIT, also Artificial Intelligence Laboratory Technical Report 2002-002, January 2002. +- [10]Jacob Beal; "Programming an Amorphous Computational Medium," in *Unconventional Programming Paradigms International Workshop* (September 2004). Updated version in Lecture Notes in Computer Science, 3566 (August 2005). +- [11]M.R. Bernfield, S.D. Banerjee, J.E. Koda, and A.C. Rapraeger; "Remodelling of the basement membrane as a mechanism of morphogenic tissue interaction," in *The role of extracellular matrix in development*, ed. R.L. Trelstad, 542–572. New York: Alan R. Liss, 1984. +- [12]Martin Berz; "Automatic differentiation as nonarchimedean analysis," in *Computer Arithmetic and Enclosure Methods*, ed. L. Atanassova and J. Herzberger. Elsevier Science Publishers B.V. (North-Holland), 1992. +- [13]Philip L. Bewig; *Scheme Requests for Implementation 41: Streams* (2008). +- [14]R.C. Bohlin and R.L. Gilliland; "Hubble Space Telescope Absolute Spectrophotometry of Vega from the Far-Ultraviolet to the Infrared," in *The Astronomical Journal*, 127(6) (June 2004): 3508–3515. +- [15]J.P. Brocks; "Amphibian limb regeneration: rebuilding a complex structure," in *Science*, 276 (1997): 81–87. +- [16]Alonzo Church; *The Calculi of Lambda-Conversion*. Princeton, NJ: Princeton University Press, 1941. +- [17]Alonzo Church; "An Unsolvable Problem of Elementary Number Theory," *American Journal of Mathematics*, 58 (1936): 345– + +- [18]Alonzo Church; "A Note on the Entscheidungsproblem," in *Journal of Symbolic Logic*, 1 (1936): 40–41. +- [19]Lauren Clement and Radhika Nagpal; "Self-Assembly and Self-Repairing Topologies," in *Workshop on Adaptability in Multi-Agent Systems*, RoboCup Australian Open, January 2003. +- [20]William Kingdon Clifford; "Preliminary sketch of biquaternions," in *Proceedings of the London Mathematical Society*, 4 (1873): 381– 395. +- [21]William Clinger; "Nondeterministic Call by Need is Neither Lazy Nor by Name," in *Proceedings of the 1982 ACM symposium on LISP and functional programming*, 226–234 (August 1982). +- [22]William Clinger and Jonathan Rees; "Macros that work," in *Proceedings of the 1991 ACM Conference on Principles of Programming Languages*, 155–162 (1991). +- [23]A Colmerauer., H. Kanoui, R. Pasero, and P. Roussel; *Un système de communication homme-machine en français*, Technical report, Groupe Intelligence Artificielle, Université d'Aix Marseille, Luminy, 1973. +- [24]*Constraints, An International Journal* ISSN: 1383-7133 (Print) 1572-9354 (Online). +- [25]Wikipedia article on continuations. +- [26]Haskell Brooks Curry; "Grundlagen der Kombinatorischen Logik," in *American Journal of Mathematics*. Baltimore: Johns Hopkins University Press, 1930. +- [27]Johan deKleer, Jon Doyle, Guy Steele, and Gerald J. Sussman; "AMORD: Explicit control of reasoning," in *Proceedings of the* + +- *ACM Symposium on Artificial Intelligence and Programming Languages*, 116–125 (1977). +- [28]E.M. del Pino and R.P. Elinson; "A novel developmental pattern for frogs: gastrulation produces an embryonic disk," in *Nature*, 306 (1983): 589–591. +- [29]Howard P. Dinesman; *Superior Mathematical Puzzles*. New York: Simon and Schuster, 1968. +- [30]Jon Doyle; "A truth maintenance system," in *Artificial Intelligence*, 12 (1979): 231–272. +- [31]K. Dybvig, R. Hieb, and C. Bruggerman; "Syntactic abstraction in Scheme," in *Proc. Lisp and Symbolic Computation* (1993). +- [32]G.M. Edelman and J.A. Gally; "Degeneracy and complexity in biological systems," *Proceedings of the National Academy of Sciences*, 98 (2001): 13763–13768. +- [33]M. D. Ernst, C. Kaplan, and C. Chambers; "Predicate Dispatching: A Unified Theory of Dispatch," in *ECOOP'98— Object-Oriented Programming: 12th European Conference*, *Proceedings*, ed. Eric Jul, 186–211, Lecture Notes in Computer Science, 1445. Berlin: Springer, 1998. +- [34]Zsuzsa Farkas; "LISTLOG—A PROLOG extension for list processing," in *TAPSOFT 1987*, ed. Ehrig H., Kowalski R., Levi G., Montanari U., Lecture Notes in Computer Science, 250. Berlin: Springer, 1987. +- [35]Robert Floyd; "Nondeterministic algorithms," in *Journal of the ACM*, 14(4) (1967): 636–644. +- [36]Kenneth D. Forbus and Johan de Kleer; *Building Problem Solvers*. Cambridge, MA: MIT Press, 1993. +- [37]Stefanie Forrest, Anil Somayaji, David H. Ackley; "Building Diverse Computer Systems," in *Proceedings of the 6th* + +- *workshop on Hot Topics in Operating Systems*, 67–72. Los Alamitos, CA: IEEE Computer Society Press, 1997. +- [38]Joseph Frankel; *Pattern Formation, Ciliate Studies and Models*. New York: Oxford University Press, 1989. +- [39]Eugene C. Freuder; *Synthesizing Constraint Expressions*. AI Memo 370, MIT Artificial Intelligence Laboratory, July 1976. +- [40]Daniel P. Friedman and David S. Wise; "Cons should not evaluate its arguments," in *Automata Languages and Programming*; Proc. Third International Colloquium at the University of Edinburgh, ed. S. Michaelson and R. Milner, 257– 284 (July 1976). +- [41]Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes; *Essentials of Programming Languages.* Cambridge, MA: MIT Press/McGraw-Hill, 1992. +- [42]Richard P. Gabriel and Linda DeMichiel; "The Common Lisp Object System: An Overview," in *Proceedings of ECOOP'87. European Conference on Object-Oriented Programming*, ed. Jean Bezivin, Jean-Marie Hullot, Pierre Cointe, and Henry Lieberman, 151–170. Paris: Springer, 1987. +- [43]George Gatewood and Joost Kiewiet de Jonge; "Map-based Trigonometric Parallaxes of Altair and Vega," in *The Astrophysical Journal*, 450 (September 1995): 364–368. +- [44]George Gatewood; "Astrometric Studies of Aldebaran, Arcturus, Vega, the Hyades, and Other Regions," in *The Astronomical Journal*, 136(1) (2008): 452–460. +- [45]Kurt Gödel; "On Undecidable Propositions of Formal Mathematical Systems," *Lecture notes taken by Kleene and Rosser at the Institute for Advanced Study* (1934), reprinted in Martin Davis *The Undecidable: Basic Papers on Undecidable Propositions, Unsolvable Problems and Computable Functions*, 39–74. New York: Raven, 1965. + +- [46]Adele Goldberg and David Robson; *Smalltalk-80: The Language and Its Implementation*. Reading, MA: Addison-Wesley, 1983. +- [47]Michael Gordon, Robin Milner, and Christopher Wadsworth; *Edinburgh LCF*, Lecture Notes in Computer Science, 78. New York: Springer-Verlag, 1979. +- [48]Cordell Green; "Application of theorem proving to problem solving," in *Proceedings of the International Joint Conference on Artificial Intelligence*, 219–240 (1969). +- [49]Cordell Green and Bertram Raphael; "The use of theoremproving techniques in question-answering systems," in *Proceedings of the ACM National Conference*, 169–181 (1968). +- [50]John V. Guttag; "Abstract data types and the development of data structures," *Communications of the ACM*, 20(6) (1977): 397–404. +- [51]Chris Hanson; *MIT/GNU Scheme Reference Manual*. +- [52]Chris Hanson; SOS software: Scheme Object System, 1993. +- [53]Chris Hanson, Tim Berners-Lee, Lalana Kagal, Gerald Jay Sussman, and Daniel Weitzner; "Data-Purpose Algebra: Modeling Data Usage Policies," in *Eighth IEEE International Workshop on Policies for Distributed Systems and Networks (POLICY'07)*, (June 2007). +- [54]Hyman Hartman and Temple F. Smith; "The Evolution of the Ribosome and the Genetic Code," in *Life*, 4 (2014): 227–249. +- [55]Jacques Herbrand; "Sur la non-contradiction de larithmetique," *Journal fur die reine und angewandte Mathematik*, 166 (1932): 1–8. + +- [56]Carl E. Hewitt; "PLANNER: A language for proving theorems in robots," in *Proceedings of the International Joint Conference on Artificial Intelligence*, 295–301 (1969). +- [57]Carl E. Hewitt; "Viewing control structures as patterns of passing messages," in *Journal of Artificial Intelligence*, 8(3) (1977): 323–364. +- [58]Carl Hewitt, Peter Bishop, Richard Steiger; "A Universal Modular ACTOR Formalism for Artificial Intelligence," in *IJCAI-73: Proceedings of the Third International Joint Conference on Artificial Intelligence*, 235–245 (1973). +- [59]Edwin Hewitt; "Rings of real-valued continuous functions. I," in *Transactions of the American Mathematical Society*, 64 (1948): 45–99. +- [60]Paul Horowitz and Winfield Hill; *The Art of Electronics*. Cambridge: Cambridge University Press, 1980. +- [61]IEEE Std 1178-1990, *IEEE Standard for the Scheme Programming Language*, Institute of Electrical and Electronic Engineers, Inc., 1991. +- [62]Paul-Alan Johnson; *The Theory of Architecture: Concepts, Themes, & Practices*. New York: Van Nostrand Reinhold, 1994. +- [63]Jerome H. Keisler; "The hyperreal line. Real numbers, generalizations of the reals, and theories of continua," in *Synthese Library*, 242, 207–237. Dordrecht: Kluwer Academic, 1994. +- [64]Richard Kelsey, William Clinger, and Jonathan Rees (editors); *Revised* 5 *Report on the Algorithmic Language Scheme* (1998). +- [65]Richard Kelsey; *Scheme Requests for Implementation 9: Defining Record types* (1999). + +- [66]Gregor Kiczales; Tiny CLOS software: Kernelized CLOS, with a metaobject protocol, 1992. +- [67]Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, and John Irwin; "Aspect-oriented programming," in *ECOOP'97: Proceedings of the 11th European Conference on Object-Oriented Programming*, 220–242 (1997). +- [68]Gregor Kiczales, Jim des Rivieres, and Daniel G. Bobrow; *The Art of the Metaobject Protocol*. Cambridge, MA: MIT Press, 1991. +- [69]Simon Kirby; *Language evolution without natural selection: From vocabulary to syntax in a population of learners.*, Edinburgh Occasional Paper in Linguistics EOPL-98-1, University of Edinburgh Department of Linguistics (1998). +- [70]Marc W. Kirschner and John C. Gerhart; *The Plausibility of Life: Resolving Darwin's Dilemma*. New Haven: Yale University Press, 2005. +- [71]Marc W. Kirschner, Tim Mitchison; "Beyond self-assembly: from microtubules to morphogenesis," in *Cell*, 45(3) (May 1986): 329–342. +- [72]D. Knuth, P. Bendix; "Simple word problems in universal algebras," in *Computational Problems in Abstract Algebra*, ed. John Leech, 263–297. London: Pergamon Press, 1970. +- [73]E. Kohlbecker, D. P. Friedman, M. Felleisen, and B. Duba; "Hygienic Macro Expansion," in *ACM Conference on LISP and Functional Programming* (1986). +- [74]E. Kohlbecker and Mitchell Wand; "Macro-by-example: Deriving syntactic transformations from their specifications," in *Proc. Symposium on Principles of Programming Languages* (1987). + +- [75]Milos Konopasek and Sundaresan Jayaraman; *The TK!Solver Book: A Guide to Problem-Solving in Science, Engineering, Business, and Education.* Berkeley, CA: Osborne/McGraw-Hill, 1984. +- [76]Robert Kowalski; *Predicate logic as a programming language*, Technical report 70, Department of Computational Logic, School of Artificial Intelligence, University of Edinburgh, 1973. +- [77]Robert Kowalski; *Logic for Problem Solving*. New York: North-Holland, 1979. +- [78]Robert M. Kowalski; "The Early Years of Logic Programming," in *Communications of the ACM*, 31(1) (January 1988): 38–43. +- [79]Temur Kutsia; "Pattern Unification with Sequence Variables and Flexible Arity Symbols," in *Electronic Notes in Theoretical Computer Science*, 66(5) (2002): 52–69. +- [80]Butler Lampson, J. J. Horning, R. London, J. G. Mitchell, and G. K. Popek; *Report on the programming language Euclid*, Technical report, Computer Systems Research Group, University of Toronto, 1981. +- [81]Peter Landin; "A correspondence between Algol 60 and Church's lambda notation: Part I," *Communications of the ACM*, 8(2) (1965): 89–101. +- [82]Henrietta S. Leavitt; "1777 variables in the Magellanic Clouds," in *Annals of Harvard College Observatory*, 60 (1908): 87–108. +- [83]Floor Van Leeuwen; "Validation of the new Hipparcos reduction," in *Astronomy & Astrophysics*, 474(2) (2007): 653– 664. +- [84]Karl Lieberherr; *Informationsverdichtung von Modellen in der Aus-sagenlogik und das P=NP Problem*, ETH Dissertation, 1977. + +- [85]Barbara H. Liskov and Stephen N. Zilles; " Specification techniques for data abstractions," in *IEEE Transactions on Software Engineering*, 1(1) (1975): 7–19. +- [86]Harvey Lodish, Arnold Berk, S Lawrence Zipursky, Paul Matsudaira, David Baltimore, and James E Darnell; *Molecular Cell Biology* (4th ed.). New York: W. H. Freeman & Co., 1999. +- [87]Oleksandr Manzyuk, Barak A. Pearlmutter, Alexey Andreyevich Radul, David R. Rush, and Jeffrey Mark Siskind; "Confusion of Tagged Perturbations in Forward Automatic Differentiation of Higher-Order Functions," arxiv:1211.4892 (2012). +- [88]David Allen McAllester; *A three-valued truth-maintenance system*, AI Memo 473, MIT Artificial Intelligence Laboratory, 1978. +- [89]David Allen McAllester "An outlook on truth maintenance," AI Memo 551, MIT Artificial Intelligence Laboratory, 1980. +- [90]John McCarthy; "A basis for a mathematical theory of computation," in *Computer Programming and Formal Systems*, ed. P. Braffort and D. Hirshberg, 33–70. Amsterdam: North-Holland, 1963. +- [91]Wikipedia article on MDL. (programming language) +- [92]Piotr Mitros; *Constraint-Satisfaction Modules: A Methodology for Analog Circuit Design*, PhD thesis, MIT, Department of Electrical Engineering and Computer Science, 2007. +- [93]Paul Penfield Jr.; *MARTHA User's Manual*, MIT Research Laboratory of Electronics, Electrodynamics Memorandum No. 6 (1970). +- [94]Barak A. Perlmutter and Jeffrey Mark Siskind; "Lazy Multivariate Higher-Order Forward-Mode AD," in *Proc. POPL'07*, 155–160. New York: ACM, 2007. + +- [95]Tim Peters; *PEP 20—The Zen of Python*. +- [96]*POSIX.1-2017*, "Base Definitions," Chapter 9, "Regular Expressions." +- [97]Jonathan Bruce Postel; *RFC 760: DoD standard Internet Protocol* (January 1980). http://www.rfc[editor.org/rfc/rfc760.txt](http://www.rfc-editor.org/rfc/rfc760.txt) +- [98]W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling; "Richardson Extrapolation and the Bulirsch-Stoer Method," in *Numerical Recipes in C: The Art of Scientific Computing* (2nd ed.), 718–725. Cambridge: Cambridge University Press, 1992. +- [99]Alexey Andreyevich Radul and Gerald Jay Sussman; "The Art of the Propagator," MIT CSAIL Technical Report MIT-CSAIL-TR-2009-002; Abridged version in *Proc. 2009 International Lisp Conference* (March 2009). +- [100]Alexey Andreyevich Radul; *Propagation networks: a flexible and expressive substrate for computation*, PhD thesis, MIT, Department of Electrical Engineering and Computer Science, 2009. +- [101]Eric Raymond; *The New Hacker's Dictionary* (2nd ed.). Cambridge, MA: MIT Press, 1993. +- [102]Jonathan A. Rees and Norman I. Adams IV; "T: A dialect of Lisp or, lambda: The ultimate software tool," in *Conference Record of the 1982 ACM Symposium on Lisp and Functional Programming*, 114–122 (1982). +- [103]John C. Reynolds; "The discoveries of continuations," in *Proc. Lisp and Symbolic Computation*, 233–248 (1993). + +- [104]J.A. Robinson; "A Machine-Oriented Logic Based on the Resolution Principle," in *Journal of the ACM*, 12(1) (January 1965): 23–41. +- [105]Guido van Rossum; *The Python Language Reference Manual*, ed. Fred L. Drake Jr., Network Theory Ltd, 2003. +- [106]Jane L. Russell, George D. Gatewood, and Thaddeus F. Worek; "Parallax Studies of Four Selected Fields," in *The Astronomical Journal*, 87(2) (February 1982): 428–432. +- [107]Erik Sandewall; "From systems to logic in the early development of nonmonotonic reasoning," in *Artificial Intelligence*, 175 (2011): 416–427. +- [108]Moses Schönfinkel; "Uber die Bausteine der mathematischen Logik," in *Mathematische Annalen*, 92 (1924): 305–316. +- [109]Alex Shinn, John Cowan, and Arthur Gleckler (editors); *Revised* 7 *Report on the Algorithmic Language Scheme* (2013). +- [110]Alex Shinn; *Scheme Requests for Implementation 115: Scheme Regular Expressions* (2014). [https://srfi.schemers.org/srfi-](https://srfi.schemers.org/srfi-115/)115/ +- [111]Jeffrey Mark Siskind and Barak A. Perlmutter; "Perturbation confusion and referential transparency: Correct functional implementation of forward-mode AD," in *Implementation and application of functional languages–17th international workshop*, ed. Andrew Butterfield, Trinity College Dublin Computer Science Department Technical Report TCD-CS-2005-60, 2005. +- [112]Brian Cantwell Smith; *Procedural Reflection in Programming Languages*, PhD thesis, MIT, Department of Electrical Engineering and Computer Science, 1982. + +- [113]Richard Matthew Stallman; *EMACS: The Extensible, Customizable, Self-Documenting Display Editor*, AI Memo 519A, MIT Artificial Intelligence Laboratory, March 1981. +- [114]Richard Matthew Stallman and Gerald Jay Sussman; "Forward Reasoning and Dependency-Directed Backtracking in a System for Computer-Aided Circuit Analysis," in *Artificial Intelligence*, 9 (1977): 135–196. +- [115]Guy Lewis Steele Jr.; *Common Lisp the language*. Maynard, MA: Digital Equipment Corporation, 1990. +- [116]Guy L. Steele Jr.; *The Definition and Implementation of a Computer Programming Language Based on Constraints*, PhD thesis, MIT, also Artificial Intelligence Laboratory Technical Report 595, August 1980. +- [117]Guy Lewis Steele Jr., Donald R. Woods, Raphael A. Finkel, Mark R. Crispin, Richard M. Stallman, and Geoffrey S. Goodfellow; *The Hacker's Dictionary*. New York: Harper & Row, 1983. +- [118]Patrick Suppes; *Introduction to Logic*. New York: D. Van Nostrand, 1957. +- [119]Gerald Jay Sussman and Richard Matthew Stallman; "Heuristic Techniques in Computer-Aided Circuit Analysis," in *IEEE Transactions on Circuits and Systems*, 22(11) (November 1975): 857–865. +- [120]Gerald Jay Sussman and Guy L. Steele Jr; "The First Report on Scheme Revisited," in *Higher-Order and Symbolic Computation*, 11(4) (December 1998): 399–404. +- [121]Gerald Jay Sussman and Jack Wisdom; *Structure and Interpretation of Classical Mechanics*. Cambridge, MA: MIT Press, 2001/2014. + +- [122]Gerald Jay Sussman and Jack Wisdom with Will Farr; *Functional Differential Geometry*. Cambridge, MA: MIT Press, 2013. +- [123]*The TTL Data Book for Design Engineers*, by the Engineering Staff of Texas Instruments Incorporated, Semiconductor Group. +- [124]Alan M. Turing; "On Computable Numbers, with an Application to the Entscheidungsproblem," in *Proceedings of the London Mathematical Society (Series 2)*, 42 (1936): 230– 265. +- [125]David L. Waltz; *Generating Semantic Descriptions From Drawings of Scenes With Shadows*, PhD thesis, MIT, also Artificial Intelligence Laboratory Technical Report 271, November 1972. +- [126]Stephen A. Ward and Robert H. Halstead Jr.; *Computation Structures*. Cambridge, MA: MIT Press, 1990. +- [127]Stephen Webb; *Measuring the Universe: The Cosmological Distance Ladder*, Springer-Praxis Series in Astronomy and Astrophysics. Berlin: Springer, 1999. +- [128]Daniel J. Weitzner, Hal Abelson, Tim Berners-Lee, Chris Hanson, Jim Hendler, Lalana Kagal, Deborah McGuinness, Gerald Jay Sussman, and K. Krasnow Waterman; *Transparent Accountable Data Mining: New Strategies for Privacy Protection*, MIT CSAIL Technical Report MIT-CSAIL-TR-2006- 007, January 2006. +- [129]Robert Edwin Wengert; "A simple automatic derivative evaluation program," in *Communications of the ACM*, 7(8) (1964): 463–464. +- [130]Carter Wiseman; *Louis I. Kahn: Beyond Time and Style: A Life in Architecture*. New York: W.W. Norton, 2007. + +- [131]Lewis Wolpert, Rosa Beddington, Thomas Jessell, Peter Lawrence, Elliot Meyerowitz, and Jim Smith; *Principles of Development* (2nd ed.). Oxford: Oxford University Press, 2001. +- [132]Ramin Zabih, David McAllester, and David Chapman; "Nondeterministic Lisp with dependency-directed backtracking," in *AAAI-87*. (1987): 59–64. + +# **Index** + +Any inaccuracies in this index may be explained by the fact that it has been prepared with the help of a computer. + +Donald E. Knuth, *Fundamental Algorithms* (Volume 1 of *The Art of Computer Programming*) + +Page numbers for Scheme procedure definitions are in *italics*. Page numbers followed by *n* indicate footnotes. + +``` +% naming convention, 152 +! naming convention, 393 n +λ (lambda) calculus, 1 n +λ expression. See lambda +λ notation, 380 n +π (pi), 381 ++->interval, 333 +' (quote in Scheme), 390 +' (backquote in Scheme), 391 +, (comma) in backquote, 391 +- (negation or subtraction), 390 +``` + +pattern-directed, 168 + +``` +. in formal parameters, 267 (ex. 5.12), 389 +. in printed representation of pair, 387 +/ in rational constant, 47 +;. See Semicolon +? for pattern variable, 158 +? in predicate name, 386 n +?? for segment variable, 159 +?* in graph matching, 215 +() in Scheme (empty list), 387 +(...) in Scheme, 380 +# in Scheme vector printout, 388 +# in character constant, 40 +#!optional parameter, 118 +#f (false), 386 +#t (true), 386 +a:, 274 n +a:advance, 274, 275 +a:apply, 274 +Abelson, Harold, 114 n, 118 n +Abstract predicate, 134 +accumulate, 389 +Activation policy for propagator, 347 +ACTOR framework message passing, 396 n +add-arithmetics, 77 +``` + +add-cell-content!, *346* + +``` +add-cell-neighbor!, 346 +add-content!, 344 +add-streams, 255 +add-to-generic-arithmetic!, 91 +address-of, 218 +address=, 219 +advance. See a:advance; g:advance; x:advance +Adventure game, 138–152 + inheritance, 140 + object properties, 139, 142, 145 +Algebra rules, 161–163 + segment variables in, 162 +Algol-60 thunk, 253 n +Alist (association list), 303 +all-args, 74 +all-knight-moves, 214 +Alternative in conditional, 384 +Alternative values, set of, 350 +Alternative world views and propagation, 349–351 +Alyssa P. Hacker, 44 (ex. 2.7), 277 (ex. 5.17) +amb, 271. See also Backtracking + continuation implementation, 288–292 + evaluator implementation, 273–277 + order of alternatives, 277, 279 + (ex. 5.20), 290–292, 294 (ex. 5.23) +``` + +### propagation implementation, 355–364 + +## Amorphous Computing, 10 *n* + +analyze, *260*. *See also* x:analyze + +analyze-amb, *277* + +analyze-application, *260* , 268 + +(ex. 5.13), *275* + +analyze-assignment, *263* , *276* + +analyze-begin, *263* + +analyze-definition, *264* + +analyze-if, *262* , *275* + +analyze-lambda, *262* + +analyze-quoted, *261* + +analyze-self-evaluating, *261* + +analyze-undoable-assignment, *276* + +analyze-variable, *261* + +Anna Logue, 340 (ex. 7.2) + +annotate-expr, *196* + +Annotation layer, 304 + +any-arg, 76 + +any-object?, 91 + +APL, 87 *n* + +Applicability of procedure, 73, 76, 78, 88, 98 + +application?, *236* + +Application of procedures, 235, 244–246 + +Applicative order, 234, 245 + +``` +apply, 23, 375 + in evaluator, 234 (see also a:apply; g:apply; x:apply) + with "extra" argument, 85 (ex. 3.2) +Architecture + parti , 5, 299 + of programs, 5–6 +Arguments + indefinite number of (see n-ary procedure) + in Scheme, 250, 380 + non-strict, 250 + strict, 251 +Arithmetic. See also Arithmetic package; Combinators: arithmetic +combinators + boolean, 84 (ex. 3.1) + on functions, 80–83 + generic (see Generic arithmetic) layered, 309–310 + symbolic, 71–73 + with units, 310–314 + on vectors, 85 (ex. 3.2) +Arithmetic operators modulating, 71–73 +Arithmetic package, 71 + combining arithmetics, 73–80 +Arity. See also n-ary procedure + of function, 23, 27 + of operator, 74 + procedure-arity, 28 +``` + +``` +Armstrong, Edwin, 10 (fig. 1.1) +Aspect-oriented programming, 88 n +assert! in propagator, 336, 349 +assert in Scheme, 28 +Assignment + ! naming convention, 393 n + backtracking and, 276 + in evaluator, 243 + in Scheme, 392–394 + set!, 393 +assignment?, 243 +assignment-value, 243 +assignment-variable, 243 +Association list (alist), 303 +Astronomy + distances to stars, 329 + magnitudes of stars, 336 +attach-rule!, 168, 170 +Automagically, 10 +Automatic differentiation, 103 + generic arithmetic handlers for, 107–110 + higher-order functions, 119 + literal functions, 123 + n-ary functions, 111 + Newton's method using, 104 +``` + +``` +Autonomous agent in game, 139, 140, 144 +Avatar in game, 139 +Backquote in Scheme, 391 +Backtracking, 269–271. See also Exploratory behavior; Generate and +test; Search + amb (see amb) + assignment and, 276 + continuations and, 287, 288–289 + dependency-directed (see Dependency-directed backtracking) + generate and test, 16 + language and, 270–271 + rules and, 162, 164 + segment variables and, 172 +Ballantyne, Michael, 203 n +Bard, Jonathan B. L., 16 n +base-layer, 303 +base-layer-value, 305 +basic-knight-move, 213 +basic-queen-move, 215 +Beal, Jacob, 8 n +begin?, 242 +begin, in evaluator and Scheme, 242 +begin-actions, 242 +Belief status of premise, 349 +Ben Bitdiddle, 44 (ex. 2.7), 277 (ex. 5.17) +``` + +``` +Bessel, Friedrich Wilhelm, 332 +binary-amb, 360 +Binary amb, 359–363 +Binding, 381 n + of formal parameters, 234, 246 + of pattern variables, 170, 172, 175 +Biology, ideas from, 8–17 +board-addresses, 217 +Board game domain model, 53 + checkers, 54–55, 59 +Body + of let expression, 385 + of procedure, 234, 381 +Body plan, 9–12 + animal, 9 + combinators and, 11, 36 + domain-specific language, 11 + radio receiver, 10 + software, 11 +Bohlin, R.C., 337 +boolean?, 84 (ex. 3.1) +Boolean arithmetic, 84 (ex. 3.1) +Boolean values, 386 +Bourne shell, 42 +BRE (Basic Regular Expression), 38 +``` + +``` +Breadth-first search, 290–292 +Brittle software, 1 +Bundle, 395–397 +bundle, 396 +Byrd, Will, 203 n +C, 65, 238 +C++ and overloading, 154 +c:, 331 (fig. 7.3) +cache-wrapped-dispatch-store, 132 +Caching, for generic dispatch, 131 +call-with-current-continuation, 282 +call-with-values, 31 n +call/cc, 282 +Call by need, 245, 251 +capture?, 223 +car, 387 +Carroll, Lewis, 285 n +cdr, 387 +Cell (propagation), 342, 343–346 +cell-merge, 344 +cell-strongest, 346 +chaining-generic-procedure, 138 +Chapman, David, 358 n +Checkers, 53–64 + domain model, 54–55, 59 +``` + +``` +Chen, Kenny, 203 n +Chess, 64 (ex. 2.12), 213–224 + board as graph, 216 + compiling move patterns to matcher procedures, 225–231 + knight move patterns, 213, 214 + making moves, 221 + move patterns on board graph, 213 + queen move patterns, 215 + Choice, nondeterministic. See amb +Choice propagator, 356–364. See also binary-amb; p:amb +Church, Alonzo, 1 n, 380 n +Circuit, electrical, 340 (ex. 7.2) +Clausal learning, 358 n +Clause in conditional, 383 +Clifford, William Klingdon, 106 n +Clinger, William, 277 n +CLOS, 88 n +Code smell, 6 n +Colmerauer, Alain, 271, 370 n +color, 218 +Combination in Scheme, 235, 380. See also Procedure: application +of +Combinatorial puzzles, 277 (ex. 5.17), 364–367 +Combinator language, 11, 30 +Combinators, 11, 22–36 + arithmetic combinators, 67–84 +``` + +``` +body plans and, 11, 36 + function combinators, 23–29 (see also Function combinators) + for pattern matching, 170, 175 + problems with, 83, 88 + for regular expressions, 38–43 + system of, 21, 22 +combined-arithmetic, 79 +Combining arithmetics, 73–80 +Comma in backquote, 391 +Common Lisp Object System, 88 n +Compiler optimization, 160, 259, 269 (ex. 5.15) + assignment and, 264 + constant folding, 268 (ex. 5.14) + peephole, 168 +Compile time, 259 +Compiling, 259 + for graph patterns, 225–231 + formal-parameter declarations, 269 (ex. 5.16) + for pattern matching, 176–179 + to execution procedures, 259–267, 273–277 (see also + analyze-...) + to propagator networks, 337 n, 340 (ex. 7.1), 367 (ex. 7.6) + to regular expressions, 39–43 +complement, 203 n, 309 n +compose, 23 , 24 (fig. 2.1), 32 , 382 +compound-propagator, 347 +``` + +``` +Compound data in Scheme, 386–389 +cond + in evaluator, 241 + in Scheme, 383 +cond?, 241 +cond-clause-consequent, 241 +cond-clause-predicate, 241 +cond-clauses, 241 +cond->if, 241 +Conditionals + in evaluator, 238 + in Scheme, 383–384 +conjoin, 309 n +connect!, 212 +connect-up-square, 219 +cons, 387 +g:cons (graph version), 210 +Consequent in conditional, 383, 384 +Consequent of rule, 161 +constant-union, 77 +Constant folding, 268 (ex. 5.14) +Constraint propagator (c:), 330, 331 (fig. 7.3) +Constructors in Scheme, 386 +Continuation-passing style, 280–281 + for amb, 273 +``` + +``` +in matcher, 170 + in rule system, 164 + in unifier, 186 +Continuations in Scheme, 280–287 +backtracking and, 287, 288–289 + call/cc, 282 + call-with-current-continuation, 282 + nonlocal exits, 284–285 + nonlocal transfer of control, 285–287 + underlying, 281–287 +Contradiction object for + propagation, 345 +Correctness vs. flexibility, 18 +Curry, Haskell, 34 +curry-argument, 34 , 34 (fig. 2.6) +Currying, 34 + for multiple arguments, 138 n + partial derivatives and, 113 (ex. + 3.8) +Cy D. Fect, 277 (ex. 5.17) +Data + layered, 302–305 + restrictions on use of, 324 + tagged, 134, 155 +Data-purpose algebra, 325 +``` + +``` +Debugging, 24 n, 260, 268 (ex. 5.13). See also Paranoid +programming + dependencies for, 315, 322, 329 + numerical code, 71, 96, 100 +Declarations + compiling, 269 (ex. 5.16) + constants, 268 (ex. 5.14) + on formal parameters, 233, 250 + inferred type, 195 + layering for, 6, 299, 321 (ex. 6.4) + lazy and lazy memo formal parameters, 253 + optional parameter, 258 (ex. 5.11) + record type, 388 + relationships between predicates, 135, 155 + rest parameter, 258 (ex. 5.11) + restrictions on formal parameters, 257 (ex. 5.10) + restrictions on pattern variables, 163 +default-object, 75 n +default-object?, 75 n +define + '.' for rest parameters, 267 (ex. 5.12), 389 + in evaluator, 244 + in Scheme, 381 +define-c:prop, 348 +define-clock-handler, 145 +define-generic-procedure-handler, 89, 99 +``` + +``` +define-layered-procedure-handler, 353 +definition?, 244 +definition-value, 244 +definition-variable, 244 +Definitions in Scheme, 381–383. See also Internal definitions in +Scheme +Degeneracy, 4, 12–14 + in biological systems, 12 + in engineered systems, 14 + evolution and, 13 + of genetic code, 12 + partial information and, 14 + physics and, 13 + propagation and, 369 + redundancy vs., 12 n +deKleer, Johan, 358 n +delay, 211 +Delegate procedure in bundle, 396 +Delegation, 128 +del Pino, E. M., 16 n +Dependency-directed + backtracking, 315, 324, 358–364, 370. See also amb: propagation + implementation combinatorial puzzles, 364–367 +Depth-first search, 277, 290–292 +derivative, 107 +Derived expression types, 240–242 +``` + +``` +Diamond, ball of mud vs., 87 +Dictionary, 166, 170, 175 +Differential equations, integrating, 68–70, 256 (ex. 5.8) +Differential object, 105 +Differentiation, automatic. See Automatic differentiation +Direction + on checkerboard, 55 + on chessboard, 213 +Directional propagator (p:), 331, 332 (fig. 7.4) +discard-argument, 33 , 33 (fig. +2.5) +disjoin*, 77 n +Dispatch. See Generic dispatch; Pattern-directed invocation +Dispatch key, 131, 136 +Dispatch store, 90, 98, 125, 128, 131, 136–138 +Distances to stars, 329 +Domain model for board game, 53 + checkers, 54–55, 59 +Domain predicate, 74 +Dotted-tail notation, 389 +Doyle, Jon, 358 n +Driver loop (read-eval-print loop), 246 +Dual numbers, 106 n +Dynamic binding in Scheme, 394–395 +e, as integral, 257 (ex. 5.8) +``` + +``` +Edge, of graph, 209, 211 +edge-value, 212 +Effects. See also Assignment + in evaluator, 242–243 + in Scheme, 392–394 +Efficiency vs. flexibility, 17 +Electrical circuit, 340 (ex. 7.2) +Element variable, 171 +Elinson, R. P., 16 n +else in cond, 383 +else-clause?, 241 +Emacs, 1 n +Empty list, 387 +Engineering + degeneracy and, 14 + half-full glass, 18 + redundancy and, 14 +Environment, in evaluation, 234, 245 + lexical scoping, 239, 246 + procedure application, 234 +Environment, in pattern matching. See Dictionary +eq?, 390 +ERE (Extended Regular Expression), 38, 46 (ex. 2.10) +Ernst, M. D., 88 n +eval, 234, 375. See also g:eval; x:eval +``` + +``` +Evaluation of expressions, 235–244 + lambda expressions, 239 + applications, 235 + assignments, 243 + conditionals, 238 + definitions, 243 + derived expressions, 240–242 + quotations, 237 + self-evaluating expressions, 236 + sequences, 242 + variables, 238 +Eva Lu Ator, 44 (ex. 2.7), 277 (ex. 5.17), 294 (ex. 5.23) +Evaluator, 12. See also Evaluation of expressions; Interpreter +evolver, 70 +Exclamation point in name, 393 n +execute-strict, 275 +Exploratory behavior, 14–17, 269–271. See also Backtracking; +Generate and test; Search +Expressions in Scheme, 379 +extend-arithmetic, 78 +extend-generic-arithmetic!, 93 +extract-dx-part, 110 +factorial, 384 , 385 + pattern-directed, 168 +Fibonacci numbers, 129, 255 +finite-part, 118 +``` + +``` +Finite part of differential object, 106 +First-class object, 282, 382 +Flexibility + additivity, 2 + body plan, 9 + brittleness vs., 1 + combinators (see Combinators) + combinators vs., 83 + correctness vs., 18 + degeneracy, 4, 12, 370, 371 + diamond vs. ball of mud, 87 + efficiency vs., 17 + exploratory behavior, 14, 329 + generic procedures, 67 + layered system, 4, 299, 356 + mix-and-match parts, 3, 22, 170, 232 + pattern-directed invocation (see Pattern-directed invocation) + Postel's law, 3, 19 n + program architecture, 5 + propagator network, 328 + redundancy, 12, 371 + rule system, 157 +flip-coin, 144 +Floyd, Bob, 271 +Fluid variable. See Parameter +``` + +``` +Forbus, Ken, 358 n +force, 211 +Formal parameters of procedure, 234, 381 +declarations, 233, 250 + lazy and lazy memo declarations, 253 + lazy arguments, 251 + optional argument, 118, 258 + (ex. 5.11) + rest arguments, 248 n, 258 (ex. 5.11), 267 (ex. 5.12), 389–390 + restriction declarations, 257 (ex. 5.10) +Franklin, Benjamin, 183 +Fredkin, Edward, 125 n +Freuder, Eugene, 332 n +Friedman, Daniel P., 254 n +Fully supported, 349 +function-extender, 82 +Functional programming, 394 n +Function arithmetic, 80–83 +Function combinators, 23–29 + compose, 23 + curry-argument, 34 + discard-argument, 33 + parallel-combine, 25 + permute-arguments, 35 + spread-combine, 26 +``` + +``` +g:, 236 n +g:advance, 236 + handlers, 254 +g:apply, 245 + handlers, 245–246 +g:eval, 235 + handlers, 235–244 + Scheme primitives and, 238 n +g:handle-operand, 252 +Games. See Adventure game; Checkers; Chess Gatewood, George D., +334 n +Generate and test, 14–17, 288, 292. See also Backtracking; +Exploratory behavior; Search + backtracking, 16 + in biology, 14 + in evolution, 16 +generic-move!, 146 +generic-procedure-constructor, 90, 97 +generic-procedure-dispatch, 100 , 125 +generic-symbolic, 309 +generic-with-layers, 309 +Generic arithmetic, 90–96 + automatic differentiation handlers, 107–110 + problems with, 94 +Generic dispatch, 4, 99. See also Dispatch store + caching for, 131 +``` + +``` +chaining handlers, 137 + most specific handler, 136 + pattern matching vs., 157 + resolution policy, 98, 130, 136 + rules for, 88 + trie data structure for, 125–130 +Generic procedures extensible, 87–101 + flexibility, 67 + implementation, 97–100 + object-oriented programming and, 4, 88 n, 138–152 +Gerhart, John C., 9 n, 14 n +get-arity, 28 +get-handler, 98 +get-hunger, 143 +Gilliland, R.L., 337 +giuoco-piano-opening, 223 +gmatch:compile-path, 226 +gmatch:compile-target, 228 +gmatch:compile-var, 230 +Gödel, Kurt, 1 n +Golden ratio, 256 +Gossip propagation, 354 (ex. 7.4) +Graph + alternate views, 216 + chessboard as, 216 +``` + +``` +implementation of, 211–212 + lazy, 211 + list as, 210 + pattern matching on, 209–231 + propagation and, 342 (ex. 7.3) +graph-match, 225 +graph-node-view, 216 +Graph edge, 209, 211 +Graph node, 209, 211 +grep, 42 +guarantee, 151 n +guarantee-list-of, 151 n +handle-cell-contradiction, 363 +handle-operand. See g:handle-operand; x:handle-operand +Handler + applicability of, 73, 98 + choosing efficiently, 125 + for arithmetic operation, 71 + for generic procedure, 88 + for layered procedure, 306 + term-rewriting rule consequent, 165 +has-edge?, 212 +Hash table, 29 n + for memoization, 132 + for sticky note, 29, 254 +``` + +``` +Haskell, 22 n, 251 + currying, 138 n + overloading, 154 + type system, xvi Herbrand, Jacques, 1 n +Hewitt, Carl E., 170 n, 271, 370 n +Hewitt, Edwin, 106 n +Hipparchus, 336 n +Hipparcos satellite, 335, 335 n, 336 n +Hox complex (genes), 9 +Hubble space telescope, 337 +Hygienic macro, 167, 240 n +Hyperreal numbers, 106 n +Hypothetical premise, 356, 359–364 +IDE (Integrated Development Environment), 321 (ex. 6.4) +if + in evaluator, 239 + in Scheme, 384 +if?, 239 +if-alternative, 239 +if-consequent, 239 +if-predicate, 239 +Improper list, 248 n +in (believed), 349 +Indentation in Scheme, 382 n +Index +``` + +``` +of this book, 409 + trie, 125 + zero-based, 388 +infer-program-types, 194, 196 +infinitesimal-part, 118 +Infinitesimal part of differential object, 106 +Infix notation, 250 (ex. 5.7) +Inheritance + delegation vs., 128 + object-oriented programming, 140 +inquire in propagator, 334 +install-arithmetic!, 72 +Integrated Development Environment (IDE), 321 (ex. 6.4) +Integrating differential equations, 68–70, 256 (ex. 5.8) +Internal definitions in Scheme, 24, 383, 385 +Interpreter, 233–254 +Intervals + in measurements, 332–336 + merging, 352 +invert-address, 219 +iota, 112 n +Iteration in Scheme, 385 +Java, 1 n, 6, 22 n + chaining, 146 + combinators, 65 +``` + +``` +interfaces, 6 n +Jonge, Joost Kiewiet de, 334 n +Justification, annotation of, 322 +Kahn, Louis Isadore, 5 +Kanizsa, Gaetano, 328 +Kanizsa's triangle illusion, 328, 328 (fig. 7.1) +Kirschner, Marc W., 9 n, 14 n +Knuth, Donald E., 409 +Kowalski, Robert M., 271 +Kutsia, Temur, 203 n +lambda + '.' or symbol for rest parameters, 248 n, 267 (ex. 5.12), 389 + in evaluator, 239 + in Scheme, 380 +lambda (λ) calculus, 1 n +lambda?, 239 +lambda-body, 239 +lambda-parameters, 239 +layer-accessor, 305 +layered-datum, 303 +layered-extender, 310 +Layered arithmetic, 309–310 +Layered data, 302–305 +``` + +Layered procedure, 301, 305–309, 352 + +``` +Layering, 4, 299. See also Architecture: of programs + declarations, 299, 321 (ex. 6.4) + program architecture, 5 +Layers + annotation layer, 304 + base layer, 303 + justification layer, 322 + support layer, 317 + units layer, 304 +Lazy arguments, 251. See also Postponed evaluation + lazy and lazy memo declarations, 253 +Lazy graph, 211 +Lazy list (stream), 211, 254–256 + integration using, 256 (ex. 5.8) +Lem E. Tweakit, 277 (ex. 5.17) +let + in evaluator, 241 + in Scheme, 384 +let?, 242 +let*, 385 +let-body, 242 +let-bound-values, 242 +let-bound-variables, 242 +let-cells, 330 +let->combination, 242 +``` + +``` +let-values, 31 n +Lexical scoping, 239, 245, 246, 382 +Lieberherr, Karl, 358 n +Lisp, xvi, 235, 387 n + Perlis quip, 17 +list, 386 +list?, 386 +list->graph, 211 +list->lazy-graph, 211 +list-ref, 388 +list-set!, 393 +Lists + as graphs, 210 + improper, 248 n + in pattern matching, 158 + in Scheme, 386–389, 393 + lazy (streams), 211, 254–256, 256 (ex. 5.8) + printing, 72 n +literal-function, 83 +Literal symbol in Scheme, 390–391 +Local names in Scheme, 384–385 +Local state, 393 + object-oriented programming and, 138 +Logic puzzles. See Combinatorial puzzles +lookup-variable-value, 238 +``` + +``` +Loops in Scheme, 385 +Louis Reasoner, 44 (ex. 2.7), 277 (ex. 5.17) +lset library, 320 +Macro, 240 n, 264 + hygienic, 167 + syntactic closure, 167 + syntax rules, 288, 295 (ex. 5.25) +Magnitudes of stars, 336 +make-annotation-layer, 304 +make-arithmetic, 74 +make-begin, 242 +make-cached-chaining-dispatch-store, 138 +make-cached-most-specific-dispatch-store, 138 +make-cell, 344 +make-chaining-dispatch-store, 137 +make-chess-board, 217 +make-chess-board-internal, 218 +make-generic-arithmetic, 90 +make-graph-edge, 212 +make-graph-node, 212 +make-if, 239 +make-infinitesimal, 116 +make-lambda, 240 +make-layered-datum, 303 +make-layered-procedure, 306 +``` + +``` +make-most-specific-dispatch-store, 137 +make-operation, 74 +make-parameter, 395 +make-pattern-operator, 169 +make-property, 142, 150, 151 +make-rule, 166 +make-simple-dispatch-store, 90, 98 +make-type, 142, 150, 152 +Manzyuk, Oleksandr, 121 n +map, 249 (ex. 5.5) +match-args, 108 +match:bindings, 175 +match:compile-pattern, 179 +match:dict-substitution, 186 +match:element, 171, 180 +match:element-var?, 178 +match:eqv, 171 +match:extend-dict, 176 +match:list, 174 +match:lookup, 176 +match:new-dict, 175 +match:segment, 173 +match:segment-var?, 178 +match:var?, 178 +``` + +Matcher. *See* Match procedure Match procedure, 166, 170 + +``` +Matrix arithmetic, 102 (ex. 3.6), 103 (ex. 3.7) +Maximal factor, 117 +maybe-grab-segment, 205 +maybe-set!, 276, 295 (ex. 5.25) +maybe-substitute, 191 +Mayer, Meinhard E., 114 n +McAllester, David, 358 n +McCarthy, John, 271, 277 n +MDL, 249 (ex. 5.6) +Memoization + hash table for, 132 + lazy evaluation and, 251 n +merge, 351 +merge-intervals, 352 +merge-value-sets, 353 +Message-accepting procedure, 396 +Metaobject Protocol, 88 n +Method. See Handler; Message-accepting procedure +MIT/GNU Scheme, 379 +Mitros, Piotr, 11 n +Mix-and-match parts, 3, 7 n, 22. See also Combinators +Moses, Joel, 87 n +most-specific-generic-procedure, 138 +Mud, ball of, 87 +Multiple values in Scheme, 30–32 +``` + +``` +n:, 69 n +Naming conventions + ! for assignment, 393 n + ? for predicate, 386 n + %, 152 +narrate!, 144 +n-ary procedure (indefinite number of arguments), 29, 72 n, 248 +(ex. 5.2), 258 (ex. 5.11), 267 (ex. 5.12), 389–390 +Neighbor in propagator, 342 +Nested definition in Scheme. See Internal definitions in Scheme +.net, 1 n +Newton's method, 104 +next-turn, 219 +Node, of graph, 209, 211 +node-at, 218 +Nogood set, 358 +Nondeterministic choice. See amb +Non-strict argument, 250. See also Postponed evaluation +Non-strict procedure, 250 +Normal order, 236, 245 +nothing?, 343 +null?, 387 +number?, 237 +*number-of-calls-to-fail*, 289 +Numbers in Scheme, 237 +``` + +Numeral, 379. *See also* Rational constant + +``` +numeric-arithmetic, 75 +Numerical integration, 68–70, 256 (ex. 5.8) +Object-oriented programming generic procedures and, 4, 88 n, 138– +152 + inheritance, 140 + local state and, 138 + modeling with, 138 +ODE integrator, 68–70 +Offset on checkerboard, 55 +operands, 236 +Operands of combination, 234, 380 + order of evaluation, 246 +operation-applicability, 74 +operation-union, 78 +operation-union-dispatch, 78 +operator, 236 +Operator of combination, 234, 380 +Optical illusion, 328, 328 (fig. +7.1) +Optional argument, 118 + optional declarations, 258 (ex. 5.11) +out (not believed), 349 +Overloading, 71–73, 154 +override-rule!, 170 +``` + +``` +p:, 332 (fig. 7.4) +p:amb, 357, 363, 364 +pair?, 387 +Pairs in Scheme, 387, 393 +parallel-combine, 25 (fig. 2.2), 26 +Parameter (fluid variable), 395 +Parameter (of procedure). See Formal parameters of procedure +parameterize, 395 +Parametric types, 202 (ex. 4.15) +Paranoid programming, 28, 65, 321 (ex. 6.3) +Parentheses in Scheme, 380, 387 +Parti , 5, 299 +partial (derivative), 111 +Partial information, 4, 130, 157 + degeneracy and, 14 + propagation, 344 + type inference, 193–201 + unification, 183, 185 +Pattern, 157 + partial information, 157, 183 + rules and, 157, 160 +Pattern-directed invocation, 158, 168–170, 370 n + - (negation or subtraction), 168 + factorial, 168 +Pattern matching, 157. See also Pattern-directed invocation; +Unification +``` + +``` +combinators for, 170, 175 + equality testing vs., 157, 183 + generic dispatch vs., 157 + on graphs, 209–231 + on lists, 158 + term rewriting, 160–167 +Pattern variable, 157, 158. See also Segment variable + in graph matching, 213, 215 + restrictions, 163 +Perlis, Alan J., 17, 150, 159 +Perlmutter, Barak A., 121 n +permute-arguments, 35 (fig. 2.7), 36 +Perturbational programming, 323 +π (pi), 381 +piece-at, 221 +piece-in, 221 +PLANNER + backtracking, 271 + pattern-directed invocation, 370 n +populate-sides, 220 +possible-directions, 55 +Postel, Jonathan Bruce, 3 +Postel's law, 3, 19 n +Postponed evaluation, 236. See also delay; force; Stream + compound propagator, 347 +``` + +``` +lazy graph, 211 + non-strict arguments, 253–254, 266 +pp (pretty-print), 72 n +predicate?, 133 +predicate-constructor, 135 +Predicate as type, 132–138 + for argument checking, 151 n + as dispatch key, 136 + for formal parameter, 257 (ex. 5.10) + in pattern variable, 162, 179 +Predicate in conditional, 383, 384 +Predicates, 386 n. See also Predicate as type + ? naming convention, 386 n + abstract predicate, 134 + domain predicate, 74 + for procedure applicability, 73, 98 + registration of, 133 + relationships between, 135, 155 +Premise, 315 + belief status, 349 + hypothetical, 356, 359–364 +premise-nogoods, 359 +Pretty-print (pp), 72 n +Prime number test, 134 +primitive-propagator, 347 +``` + +``` +Primitive procedure, 245 +print-all-results, 173 +Printing list structure, 72 n +Procedure + application of, 235, 244–246 + lambda expression for, 380 (see also lambda) + layered, 301, 305–309, 352 + match procedure, 166, 170 + message-accepting, 396 + with multiple values, 30–32 + n-ary (see n-ary procedure) + with non-strict arguments, 250–256 + non-strict, 250 + primitive, 245 + strict, 245, 250 + variadic (see n-ary procedure) + with indefinite number of arguments (see n-ary procedure) +procedure-parameter-name, 252 +program-constraints, 199 +Programming + additive, 1–5 + architecture of, 5–6 + layered, 299 +Prolog + backtracking, 271 +``` + +``` +occurs check, 191 n + pattern-directed invocation, 370 n + segment variables, 203 n +Propagation + activation policy, 347 + alternative world views, 349–351 + amb, 355–364 + astronomy example, 329–340 + cell, 342, 343–346 + circuit example, 340 (ex. 7.2) + degeneracy and, 369 + graph example, 342 (ex. 7.3) + mechanism, 342–349 + merging values, 351–354 + model of computation, 327–329 + neighbor, 342 + partial information, 344 + propagator, 342, 346–349 (see also Propagator) + scheduler, 342, 343 + searching alternatives, 355–364 + type inference, 368 (ex. 7.8) + unification and, 354 (ex. 7.4) + wiring diagram vs. expression, 327, 331 (fig. 7.3), 337 n, 340 (ex. + 7.1), 367 (ex. 7.6), 369 +Propagator, 342, 346–349 + choice propagator (see Choice propagator) +``` + +``` +constraint propagator (c:), 330, 331 (fig. 7.3) + directional propagator (p:), 331, 332 (fig. 7.4) + input and output cells, 343 +propagator, 346 +property-getter, 145 +Property list, 303 +Provenance, 299, 315, 322, 328, 333 +Puzzles (combinatorial), 277 (ex. 5.17), 364–367 +Pythagorean triples, 272, 293 (ex. 5.22), 357 +Python, 6, 14 n + generic arithmetic, 87 +Quasiquotation in Scheme, 391 +Question mark. See ? +Quotation + in evaluator, 237 + in Scheme, 390–391 +quote, 237 +quoted?, 237 +Radio receiver, 10 +Radul, Alexey Andreyevich, 121 n, 344 n, 358 n, 370 +random-bias, 143 +random-choice, 143 +random-number, 144 +Randomness. See flip-coin; random-... +``` + +``` +Rational constant, 47, 379 +Read-eval-print loop (repl), 246 +Records in Scheme, 151, 386–389, 394 + record type declaration, 388 +Recursive procedures, 384 +reduce-right, 263 +Redundancy, 12–14, 130 + in biological systems, 12 + degeneracy vs., 12 n + in engineered systems, 14 +ref-stream, 255 +Referee for game, 53, 210 +Registration of predicate, 133 +Regular expressions, 37–38 + combinator implementation, 38–43 +Relationships between predicates, 135, 155 +repl, 246 +require, 272, 292 +Resolution policy for generic dispatch, 98, 130, 136 +Rest parameter, 248 n, 267 (ex. 5.12), 390 +rest declarations, 258 (ex. 5.11) +restrict-arity, 28 +Restrictions + on formal parameters, 257 (ex. 5.10) + on pattern variables, 163 +``` + +``` +restrict-to declarations, 258 +(ex. 5.10) +result-receiver, 170 +retract! in propagator, 335, 349 +Returning multiple values in Scheme, 30–32 +Robinson, John Alan, 183 +rotate-180-view, 216 +Roussel, Phillipe, 271 +Ruby and continuations, 282 +rule, 167 +rule-simplifier, 161, 165 +Rules + algebra, 161–163 + backtracking and, 162, 164 + for generic procedure dispatch, 88 + patterns and, 157, 160 +Run time, 259 +Russell, Jane L., 334 +Sandewall, Erik, 271 n +Satellite, Hipparcos, 335, 335 n, 336 n +SAT solver, 358 n, 368 +say!, 148 +Scheduler for propagation, 342, 343 +Scheme, xvi, 244, 379–395 + MIT/GNU Scheme, 379 +``` + +``` +Schönfinkel, Moses, 34 n +scmutils, 101 +Scope, 381 n. See also Lexical scoping +Search, 355–356. See also amb; Backtracking; Exploratory behavior; +Generate and test + depth-first and breadth-first, 277, 290–292 +Segment variable, 159. See also Pattern variable + in algebra rules, 162 + backtracking and, 172 + unification and, 203–208 +Selectors in Scheme, 386 +self-evaluating?, 237 +Semicolon (;). See also Syntactic sugar + comment introduced by, 390 +Sensitivity analysis, 323 +sequence->begin, 240 +set! + in evaluator, 243 + in Scheme, 393 +set-car!, 393 +set-cdr!, 393 +set-piece-at, 221 +set-predicate<=!, 136 +setup-propagator-system, 366 +SI (International System of Units), 314 (ex. 6.1) +SICP, 379 +``` + +``` +inhabitants, 44 (ex. 2.7), 277 (ex. 5.17), 294 (ex. 5.23) +simple-abstract-predicate, 134 +simple-generic-procedure, 89, 89 , 97 +simple-move, 222 +simple-operation, 74 +Simplification, algebraic, 161–163 +Siskind, Jeffrey Mark, 121 n +Smalltalk + continuations, 282 + currying, 138 n + message passing, 396 n +Smith, Brian Cantwell, 237 n +SML and continuations, 282 +Snark hunt, 285 (ex. 5.21) +Software support for book, 377 +SOS, 88 n +Special form, 235, 380 + implemented by macro, 264 + in evaluator, 237–244 +spread-apply, 32 +spread-combine, 27 (fig. 2.3), 28 , 31 , 31 (fig. 2.4) +square, 381 +Stallman, Richard Matthew, 332 n, 358 n +Standards, 46 (ex. 2.10) +Stars +``` + +``` +distances to, 329 + magnitudes of, 336 +start-chess-game, 220 +Steele, Guy Lewis Jr., 30 n, 332 n, 358 n +Sticky note + hash table for, 29, 254 + for metadata, 169 +stormer-2, 69 +Stormer's integrator, 68 +Stream (lazy list), 211, 254–256 + integration using, 256 (ex. 5.8) +Strict argument, 251 +Strict procedure, 245, 250 +strongest-consequence, 351 +strongest-value, 350 +Struve, Friedrich G. W. von, 332 +Suppes, Patrick, 322 n +support-layer, 318 +support-layer-value, 318 +support-set abstraction (...support-set...), 319 +Support for datum, 316 +Support layer, 317 +Support set, 315 +Sussman, Gerald Jay, 106 n, 114 n, 332 n, 358 n, 370 +Symbol, in Scheme, 238 n, 390–391 +``` + +``` +symbolic-extender, 76 +Symbolic arithmetic, 71–73 +symmetrize-move, 214 +Syntactic sugar, 159, 315 (ex. 6.1) + define as, 382 + derived expression types, 240–242 +Syntax. See Combination; Macro; Special form; Syntactic +sugar +Tag, for predicate, 131, 133, 136 +tagged-list?, 238 +Tagged data, 134, 155 +take-thing, 147 +Tannenbaum, Andrew S., 46 (ex. 2.10) +tell! in adventure game, 147 +tell! in propagator, 333 +Term rewriting, 160–167 + for algebraic simplification, 161–163 + for compiler optimization, 160, 168 + equational theories, 160 + pattern matching, 160–167 +test-content!, 344 , 345 +text-of-quotation, 237 +the-contradiction, 345 +the-nothing, 343, 344 +the-unspecified-value, 239 +``` + +``` +Thunk, 253 n +tinyCLOS, 88 n +Trie data structure, for generic dispatch, 125–130 +Troll, 139, 142–144 +Truth-maintenance system, 358 n +try-rules, 165 +TTL mix-and-match parts, 7 n +Turing, Alan, 1 n +Turn in chess + labeling edge to piece, 220, 221 + next-turn, 219 + turn state variable, 218 +type-instantiator, 142, 150, 152 +type-properties, 152 +Typed expression, 194 +Type inference, 193–201 + inferred declaration, 195 + propagation for, 368 (ex. 7.8) + unification for, 196, 200 +Types. See also Predicate as type in adventure game, 142–145, 150– +152 + parametric, 202 (ex. 4.15) + union, 202 (ex. 4.16) + user-defined, 132–138 +Unbound variable, 238, 247 (ex. 5.1) +``` + +``` +Unification, 157, 183–184 + as equation solving, 185 + partial information and, 183, 185 + propagation and, 354 (ex. 7.4) + segment variables and, 203–208 + substitution instance, 183 + type inference and, 193–201 + unifier, 183 +unifier, 186 +unify, 186 +unify-constraints, 200 +unify:internal, 187 +Union types, 202 (ex. 4.16) +unit, 311 +unit-arithmetic, 312 +unit-layer, 304 +Units (of measurement), 47–48 + arithmetic with, 310–314 + base vs. derived units, 310 n + SI (International System of Units), 314 (ex. 6.1) + units layer, 304 + wrappers for, 49–52 +UNIX and streams, 297 +User-defined types, 132–138 +``` + +``` +Value set, 350 + merging, 353 +Variable, 381. See also Pattern variable; Segment variable + in evaluator, 238 + variable?, 238 +Variadic procedure. See n-ary procedure +vector, 388 +vector?, 388 +vector-ref, 388 +vector-set!, 393 +Vector arithmetic, 85 (ex. 3.2), 102 (ex. 3.6), 103 (ex. 3.7) +Vectors and covectors, 112, 113 (ex. 3.10) +Vectors in Scheme, 386–389, 393 +Vectors of procedures, 248 (ex. 5.3) +Waltz, David L., 332 n + Waltz algorithm, 342 (ex. 7.3) +Warren, David, 271 +Website for book software, 377 +Wengert, Robert Edwin, 103 n +white-move?, 218 +Whitespace in Scheme, 382 n +Wilde, Oscar (Perlis's paraphrase of), 17 +Wiring diagram. See Propagation: wiring diagram +Wisdom, Jack, 104 n, 114 n +Wise, David S., 254 n +``` + +``` +with-breadth-first-schedule, 290 +with-depth-first-schedule, 290 +Wrappers, 46–52 + specializers, 49 + units of measurement and, 49–52 +write-line, 392 n +x:, 260 n +x:advance, 261 + handlers, 267 +x:analyze, 260 + handlers, 261–264 +``` + +x:apply, *265* handlers, 265–266 x:eval, *259* x:handle-operand, *266* + +Zabih, Ramin, 358 *n* Zero-based indexing, 388 Zuras, Dan, 106 *n* + +# **List of Exercises** + +| 2.1 | 2.4 | 2.7 | 2.10 | 2.13 | +|-----|------|------|------|------| +| 29 | 36 | 44 | 46 | 64 | +| 2.2 | 2.5 | 2.8 | 2.11 | 2.14 | +| 29 | 37 | 45 | 52 | 64 | +| 2.3 | 2.6 | 2.9 | 2.12 | | +| 32 | 43 | 46 | 64 | | +| | | | | | +| 3.1 | 3.6 | 3.11 | 3.16 | 3.21 | +| 84 | 102 | 123 | 153 | 153 | +| 3.2 | 3.7 | 3.12 | 3.17 | 3.22 | +| 85 | 103 | 124 | 153 | 154 | +| 3.3 | 3.8 | 3.13 | 3.18 | | +| 86 | 113 | 129 | 153 | | +| 3.4 | 3.9 | 3.14 | 3.19 | | +| 101 | 113 | 130 | 153 | | +| 3.5 | 3.10 | 3.15 | 3.20 | | +| 101 | 113 | 132 | 153 | | +| | | | | | +| 4.1 | 4.6 | 4.11 | 4.16 | 4.21 | +| 162 | 180 | 193 | 202 | 209 | +| 4.2 | 4.7 | 4.12 | 4.17 | 4.22 | +| 163 | 181 | 193 | 202 | 213 | +| 4.3 | 4.8 | 4.13 | 4.18 | 4.23 | +| 164 | 182 | 193 | 202 | 216 | +| 4.4 | 4.9 | 4.14 | 4.19 | 4.24 | +| 164 | 182 | 201 | 208 | 225 | +| 4.5 | 4.10 | 4.15 | 4.20 | 4.25 | +| 179 | 193 | 202 | 209 | 231 | +| | | | | | +| 5.1 | 5.7 | 5.13 | 5.19 | 5.25 | +| 247 | 250 | 268 | 278 | 295 | +| 5.2 | 5.8 | 5.14 | 5.20 | 5.26 | +| 248 | 256 | 268 | 279 | 295 | +| 5.3 | 5.9 | 5.15 | 5.21 | | +| 248 | 257 | 269 | 285 | | +| 5.4 | 5.10 | 5.16 | 5.22 | | +| 249 | 257 | 269 | 293 | | +| 5.5 | 5.11 | 5.17 | 5.23 | | +| 249 | 258 | 277 | 294 | | +| 5.6 | 5.12 | 5.18 | 5.24 | | +| 249 | 267 | 278 | 294 | | +| | | | | | +| 6.1 | 6.2 | 6.3 | 6.4 | 6.5 | +| 314 | 320 | 321 | 321 | 323 | +| | | | | | +| 7.1 | 7.3 | 7.5 | 7.7 | | +| 340 | 342 | 367 | 368 | | +| 7.2 | 7.4 | 7.6 | 7.8 | | +| 340 | 354 | 367 | 368 | | \ No newline at end of file diff --git a/raw/notes/.gitkeep b/raw/notes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/raw/repos/.gitkeep b/raw/repos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/wiki/CLAUDE.md b/wiki/CLAUDE.md new file mode 100644 index 0000000..2f12bc2 --- /dev/null +++ b/wiki/CLAUDE.md @@ -0,0 +1,33 @@ +# wiki/ — AI 컴파일 위키 + +`raw/`의 원본을 소화해서 개념·패턴·결정으로 정리하는 공간. + +## 작업 순서 + +1. `index.md`를 먼저 읽는다 +2. 기존 페이지 업데이트 우선 — 새 페이지는 마지막 수단 +3. 모든 작업을 `log.md`에 기록 +4. 새 페이지 생성/삭제 시 `index.md` 업데이트 필수 + +## 하위 폴더 + +| 폴더 | 내용 | +|------|------| +| `concepts/` | 핵심 개념 (가산적 아키텍처 등) | +| `sources/` | 출처별 요약 (책, 아티클) | +| `patterns/` | 설계 패턴 | + +## 페이지 형식 + +```yaml +--- +title: 페이지 제목 +tags: [concept | source | pattern] +source: 출처 (있을 경우) +updated: YYYY-MM-DD +--- +``` + +- 내부 참조는 `[[wikilink]]` 형식 +- 소스 요약은 사실만 — 해석은 `concepts/`에서 +- 모순 발견 시 양쪽 소스 모두 인용 diff --git a/wiki/concepts/.gitkeep b/wiki/concepts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/wiki/index.md b/wiki/index.md new file mode 100644 index 0000000..ed9d670 --- /dev/null +++ b/wiki/index.md @@ -0,0 +1,26 @@ +--- +title: Wiki Index +updated: 2026-04-30 +--- + +# Wiki Index + +> 질의 시 이 파일을 먼저 읽는다. 새 페이지 생성/삭제 시 반드시 업데이트. + +## Concepts — 핵심 개념 + + + +(비어 있음) + +## Sources — 출처 요약 + + + +(비어 있음) + +## Patterns — 설계 패턴 + + + +(비어 있음) diff --git a/wiki/log.md b/wiki/log.md new file mode 100644 index 0000000..cddc385 --- /dev/null +++ b/wiki/log.md @@ -0,0 +1,17 @@ +--- +title: Wiki Operation Log +--- + +# Wiki Log + +> 모든 오퍼레이션마다 기록. 형식: `YYYY-MM-DD — [동작] 설명` + +--- + +## 2026-04-30 + +- `wiki/` 폴더 초기화 — index.md, log.md, CLAUDE.md 생성 +- `wiki/concepts/`, `wiki/sources/`, `wiki/patterns/` 폴더 생성 +- `raw/` CLAUDE.md 추가, articles/, repos/, notes/ 폴더 생성 +- `output/` 폴더 및 CLAUDE.md 생성 +- 메인 CLAUDE.md에 볼트 구조 및 위키 운영 규칙 추가 diff --git a/wiki/patterns/.gitkeep b/wiki/patterns/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/wiki/sources/.gitkeep b/wiki/sources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/나의 핵심 맥락.md b/나의 핵심 맥락.md new file mode 100644 index 0000000..dd7b22d --- /dev/null +++ b/나의 핵심 맥락.md @@ -0,0 +1,62 @@ +# 나의 핵심 맥락 + +## 나는 누구인가 + +25년 경력의 소프트웨어 아키텍트. +소프트웨어 설계 및 구현 관리를 핵심 역할로 삼고 있다. + +## 핵심 철학 + +**가산적 아키텍처(Additive Architecture)** — +새로운 상황에 최소한의 코드 수정만으로 적응할 수 있는 대형 시스템 구축 전략. + +> *Strategies for building large systems that can be easily adapted for new situations with only minor programming modifications.* + +변경이 아닌 **추가**로 시스템을 진화시킨다. + +### 소프트웨어 설계의 역사적 교훈 + +| 시대 | 접근 | 문제 | +|------|------|------| +| 절차지향 | 순차 로직 | IF문 폭발 → 재작성 | +| OOP + 디자인 패턴 | 객체와 패턴 | 복잡도 폭발, 가파른 학습곡선 | +| AI 코딩 | 가산적 생성 | 쓰레기 코드, 의도 이탈, 기억 단절 | + +가산적 아키텍처는 각 시대의 실패를 넘어서는 **설계의 뿌리**를 목표로 한다. + +## 세컨드 브레인 프로젝트 + +### 목적 + +세상의 "진화하는 소프트웨어" 관련 지식을 체계적으로 모으고, +나의 맥락에 맞게 정리·연결해서, +AI가 읽고 가산적 설계를 실천할 수 있게 한다. + +### 핵심 지식 소스 + +**1. Software Design for Flexibility** +저자: Chris Hanson, Gerald Jay Sussman (MIT Press, 2021) +GitHub: https://github.com/jeffhhk/SoftwareDesignForFlexibility +관점: **어떻게** 조합하고 확장하는가 — 제네릭 연산, 콤비네이터, 추상화를 통한 유연성 + +**2. Essence of Software** +저자: Daniel Jackson +사이트: https://essenceofsoftware.com +관점: **무엇을** 설계하는가 — 개념의 분리와 본질, 소프트웨어 복잡도의 근원 + +두 책은 상호 보완적이다: +Hanson/Sussman → 기술적 메커니즘 / Jackson → 개념적 설계 원칙 + +### 독자 + +- **AI** — 코딩 세션 시작 전 컨텍스트로 읽고 가산적 원칙 적용 +- **아키텍트(나)** — 원칙을 학습하고 설계 판단의 기준으로 활용 + +## 작동 원칙 + +| 원칙 | 내용 | +|------|------| +| 가산성 | 기존 코드를 건드리지 않고 기능을 추가한다 | +| 검증 책임 | AI는 생성, 나는 판단 | +| 기록 | 설계 결정의 이유를 남긴다 | +| 언어 | 한국어로 사고하고 기록한다 |

    Xei{@EApz69`Dpufx%1c!x*JM(VfF8%Vf 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