CONTENTS
Preface iii
 
Dedication v
 
Chapter 1 The Robot World 1
1.1 The Robot World 1
1.2 Robot Capabilities 3
1.3 Tasks and Situations 4
1.4 Robots and Objects 4
1.5 Important Ideas From This Chapter 5
1.6 Problem Set 5
 
Chapter 2 Primitive Instructions and Simple Programs 7
2.1 Changing Position 7
2.2 Turning in Place 8
2.3 Finishing a Task 9
2.4 Handling Beepers 9
2.5 Robot Descriptions 9
2.6 A Complete Program 11
2.6.1 Executing a Program 12
2.6.2 The Form of Robot Programs 14
2.7 Error Shutoffs 15
2.8 Programming Errors 16
2.8.1 Bugs and Debugging 18
2.9 A Task for Two Robots 19
2.10 An infinity of Beepers 20
2.11 Some Terminology 20
2.12 Important Ideas From This Chapter 21
2.13 Problem Set 21
 
Chapter 3 Extending the Robot Programming Language 30
3.1 Creating a More Natural Programming Language 30
3.2 A Mechanism that Defines New Classes of Robots 31
3.3 Defining the New Methods 32
3.4 The Meaning and Correctness of New Methods 35
3.5 Defining New Methods in a Program 36
3.6 Modifying Inherited Methods 39
3.7 An Ungrammatical Program 41
3.8 Tools for Designing and Writing Robot Programs 42
3.8.1 Stepwise Refinement-a Technique for Planning, Implementing, and
Analyzing Robot Programs 42
3.8.2 The Second Step-Planning harvestTwoRows and positionForNextHarvest 46
3.8.3 The Third Step-Planning harvestOneRow and goToNextRow 48
3.8.4 The Final Step-Verifying That the Complete Program is Correct 50
3.9 Advantages of Using New Instructions 52
3.9.1 Avoiding Errors 53
3.9.2 Future Modifications 54
3.9.3 A Program Without New instructions 56
3.10 Writing Understandable Programs 58
3.11 Important Ideas From This Chapter 59
3.12 Problem Set 59
 
Chapter 4 Polymorphism 65
4.1 Robot Teams 65
4.2 Similar Tasks 67
4.3 Choreographers 70
4.4 Object Oriented Design -- Clients and Servers 73
4.5 Using Polymorphism 79
4.6 Still More on Polymorphism -- Strategy and Delegation 83
4.7 Java Enumerations and More on Strategies 89
4.8 Decorators 93
4.9 Observers 95
4.10 Final Words on Polymorphism 97
4.11 Important Ideas From This Chapter 98
4.12 Problem Set 99
 
Chapter 5 Conditionally Executing Instructions 103
5.1 The IF Instruction 103
5.2 The Conditions That Robots Can Test 104
5.2.1 Writing New Predicates 106
5.3 Simple Examples of the IF Instruction 108
5.3.1 The harvestOneRow Method 108
5.3.2 The faceNorthIfFacingSouth Method 109
5.3.3 The faceNorth Method 110
5.3.4 Determining the correctness of the IF Instruction 112
5.4 The IF/ELSE Instruction 113
5.5 Nested IF Instructions 115
5.6 More Complex Tests 119
5.7 When to Use an IF Instruction 121
5.8 Transformations for Simplifying IF Instructions 123
5.9 Polymorphism Revisited 127
5.10 Important Ideas From This Chapter 129
5.11 Problem Set 129
 
Chapter 6 Instructions That Repeat 136
6.1 The FOR-LOOP Instruction 136
6.2 The WHILE Instruction 139
6.2.1 Why WHILE is Needed 139
6.2.2 The Form of the WHILE Instruction 139
6.2.3 Building a WHILE Loop - the Four Step Process 140
6.2.4 A More Interesting Problem 142
6.3 Errors to Avoid with WHILE Loops 144
6.3.1 The Fence Post Problem 145
6.3.2 Infinite Execution 146
6.3.3 When the test of a WHILE is Checked 147
6.4 Nested WHILE Loops 148
6.4.1 A Good Example of Nesting 148
6.4.2 A Bad Example of Nesting 151
6.5 WHILE and IF Instructions 157
6.6 Reasoning about Loops 158
6.7 A Large Program Written by Stepwise Refinement 161
6.8 Enumerations and the While Statement 166
6.9 When to Use a Repeating Instruction 167
6.10 Important Ideas From This Chapter 169
6.11 Problem Set 169
 
Chapter 7 Advanced Techniques for Robots 184
7.1 Introduction to Recursion 184
7.2 More on Recursion 186
7.3 Tail Recursion and Looping 190
7.4 Going Formal 191
7.5 Searching 191
7.6 Doing Arithmetic 196
7.7 Polymorphism--Why Write Many Programs When One Will Do? 201
7.8 Conclusion 203
7.9 Important Ideas From This Chapter 204
7.10 Problem Set 204
 
Chapter 8 Concurrent Robot Programs 209
8.1 Simple Concurrent Programs 209
8.2 Robot Runs In Its Own Thread 210
8.3 Cooperation 211
8.4 Race Conditions 212
8.5 Deadlock 213
8.6 Important Ideas From This Chapter 215
8.7 Problem Set 215
 
Appendix 217
1 Java main 217
2 KarelRunner 218
3 Compiling and Executing Robot Code 219
4 Constructors in Java 220
5 Controllers and Inner Classes 221
6 Java Cloning 225
 
Index of Terms 227
Index of Classes Used in the Book 228
Index of Methods Used in the Book 229