| Preface to the Dover Edition | p. iii |
| Preface | p. v |
| Introduction | p. 1 |
| Names and values in programming | p. 2 |
| Names and values in imperative and functional languages | p. 2 |
| Execution order in imperative and functional languages | p. 3 |
| Repetition in imperative and functional languages | p. 5 |
| Data structures in functional languages | p. 7 |
| Functions as values | p. 8 |
| The origins of functional languages | p. 9 |
| Computing and the theory of computing | p. 11 |
| ? calculus | p. 13 |
| Summary | p. 14 |
| ¿ calculus | p. 15 |
| Abstraction | p. 16 |
| Abstraction in programming languages | p. 19 |
| Introducing ¿ calculus | p. 20 |
| ¿ expressions | p. 21 |
| Simple ¿ functions | p. 23 |
| Introducing new syntax | p. 30 |
| Notations for naming functions and reduction | p. 31 |
| Functions from functions | p. 31 |
| Argument selection and argument pairing functions | p. 33 |
| Free and bound variables | p. 33 |
| Name clashes and ¿ conversion | p. 43 |
| Simplification through ¿ reduction | p. 44 |
| Summary | p. 45 |
| Exercises | p. 47 |
| Conditions, booleans and numbers | p. 49 |
| Truth values and conditional expression | p. 50 |
| NOT | p. 51 |
| AND | p. 52 |
| OR | p. 54 |
| Natural numbers | p. 55 |
| Simplified notations | p. 59 |
| Summary | p. 61 |
| Exercises | p. 62 |
| Recursion and arithmetic | p. 65 |
| Repetitions, iteration and recursion | p. 66 |
| Recursion through definitions? | p. 68 |
| Passing a function to itself | p. 69 |
| Applicative order reduction | p. 72 |
| Recursion function | p. 73 |
| Recursion notation | p. 77 |
| Arithmetic operations | p. 78 |
| Summary | p. 82 |
| Exercises | p. 84 |
| Types | p. 87 |
| Types and programming | p. 88 |
| Types as objects and operations | p. 89 |
| Representing typed objects | p. 91 |
| Errors | p. 92 |
| Booleans | p. 94 |
| Typed conditional expression | p. 97 |
| Numbers and arithmetic | p. 98 |
| Characters | p. 101 |
| Repetitive type checking | p. 104 |
| Static and dynamic type checking | p. 107 |
| Infix operators | p. 107 |
| Case definitions and structure matching | p. 108 |
| Summary | p. 111 |
| Exercises | p. 113 |
| Lists and strings | p. 115 |
| Lists | p. 116 |
| List representation | p. 119 |
| Operations on lists | p. 122 |
| List notation | p. 124 |
| Lists and evaluation | p. 127 |
| Deletion from a list | p. 127 |
| List comparison | p. 129 |
| Strings | p. 131 |
| String comparison | p. 132 |
| Numeric string to number conversion | p. 134 |
| Structure matching with lists | p. 139 |
| Ordered linear lists, insertion and sorting | p. 140 |
| Indexed linear list access | p. 142 |
| Mapping functions | p. 146 |
| Summary | p. 150 |
| Exercises | p. 151 |
| Composite values and trees | p. 153 |
| Composite values | p. 154 |
| Processing composite value sequences | p. 155 |
| Selector functions | p. 157 |
| Generalized structure matching | p. 160 |
| Local definitions | p. 164 |
| Matching composite value results | p. 164 |
| List inefficiency | p. 167 |
| Trees | p. 168 |
| Adding values to ordered binary trees | p. 169 |
| Binary tree traversal | p. 173 |
| Binary tree search | p. 174 |
| Binary trees of composite values | p. 176 |
| Binary tree efficiency | p. 178 |
| Curried and uncurried functions | p. 179 |
| Partial application | p. 181 |
| Structures, values and functions | p. 183 |
| Summary | p. 183 |
| Exercises | p. 184 |
| Evaluation | p. 187 |
| Termination and normal form | p. 188 |
| Normal order | p. 189 |
| Applicative order | p. 190 |
| Consistent applicative order use | p. 191 |
| Delaying evaluation | p. 193 |
| Evaluation termination, the halting problem, evaluation equivalence and the Church-Rosser theorems | p. 196 |
| Infinite objects | p. 197 |
| Lazy evaluation | p. 199 |
| Summary | p. 204 |
| Exercises | p. 205 |
| Functional programming in Standard ML | p. 207 |
| Types | p. 208 |
| Lists | p. 209 |
| Tuples | p. 210 |
| Function types and expressions | p. 211 |
| Standard functions | p. 212 |
| Comparison operators | p. 218 |
| Functions | p. 218 |
| Making bound variables' types explicit | p. 219 |
| Definitions | p. 220 |
| Conditional expressions | p. 221 |
| Recursion and function definitions | p. 221 |
| Tuple selection | p. 222 |
| Pattern matching | p. 223 |
| Local definitions | p. 225 |
| Type expressions and abbreviated types | p. 226 |
| Type variables and polymorphism | p. 227 |
| New types | p. 230 |
| Trees | p. 234 |
| ¿ calculus in SML | p. 237 |
| Other features | p. 238 |
| Summary | p. 238 |
| Exercises | p. 238 |
| Functional programming and LISP | p. 243 |
| Atoms, numbers and symbols | p. 244 |
| Forms, expressions and function applications | p. 245 |
| Logic | p. 245 |
| Arithmetic and numeric comparison | p. 246 |
| Lambda functions | p. 248 |
| Global definitions | p. 250 |
| Conditional expressions | p. 251 |
| Quoting | p. 252 |
| Lists | p. 253 |
| List selection | p. 255 |
| Recursion | p. 256 |
| Local definitions | p. 257 |
| Binary trees in LISP | p. 257 |
| Dynamic and lexical scope | p. 259 |
| Functions as values and arguments | p. 261 |
| Symbols, quoting and evaluation | p. 263 |
| ¿ calculus in LISP | p. 265 |
| ¿ calculus and Scheme | p. 266 |
| Other features | p. 268 |
| Summary | p. 268 |
| Exercises | p. 268 |
| Answers to exercises | p. 273 |
| Bibliography | p. 305 |
| Index | p. 313 |
| Table of Contents provided by Ingram. All Rights Reserved. |