## The Functional Approach to ProgrammingA programming course should concentrate on a program's logical structure and design rather than on simply writing code. The functional approach to programming achieves this aim because logical concepts are evident and programs are transparent, and so can be written quickly and cleanly. In this book, the authors emphasize the notions of function and relate programming to familiar concepts from mathematics and logic. They introduce functional programming via examples but also explain what programs compute and how to reason about them. They show how the ideas can be implemented in the Caml language, a dialect of the ML family, and give examples of how complex programs from a variety of areas (such as arithmetic, tree algorithms, graph algorithms, text parsing and geometry) can be developed in close agreement with their specifications. Many exercises and examples are included throughout the book; solutions are also available. An appendix gives all the code used in the book in Standard ML. |

### What people are saying - Write a review

#### LibraryThing Review

User Review - tlockney - LibraryThingThis was recommended by a good friends who's opinion matters greatly to me. Looking forward to finding a reasonably priced copy at some point. Read full review

### Contents

IV | 13 |

V | 14 |

VI | 16 |

VII | 20 |

VIII | 21 |

IX | 29 |

X | 32 |

XI | 35 |

LVI | 229 |

LVII | 230 |

LVIII | 231 |

LIX | 232 |

LX | 233 |

LXI | 237 |

LXII | 246 |

LXIII | 258 |

XII | 36 |

XIII | 37 |

XIV | 44 |

XVI | 47 |

XVII | 49 |

XVIII | 59 |

XIX | 70 |

XXI | 73 |

XXII | 74 |

XXIII | 84 |

XXIV | 91 |

XXV | 92 |

XXVI | 103 |

XXVII | 104 |

XXVIII | 105 |

XXIX | 107 |

XXX | 111 |

XXXI | 114 |

XXXII | 118 |

XXXIII | 129 |

XXXIV | 131 |

XXXVI | 133 |

XXXVII | 135 |

XXXVIII | 143 |

XXXIX | 148 |

XL | 154 |

XLII | 157 |

XLIII | 159 |

XLIV | 161 |

XLV | 163 |

XLVI | 164 |

XLVII | 173 |

XLVIII | 187 |

XLIX | 189 |

L | 192 |

LI | 194 |

LIII | 195 |

LIV | 197 |

LV | 206 |

LXIV | 265 |

LXV | 278 |

LXVII | 281 |

LXVIII | 282 |

LXIX | 289 |

LXX | 298 |

LXXI | 318 |

LXXII | 332 |

LXXIII | 335 |

LXXIV | 337 |

LXXV | 338 |

LXXVI | 349 |

LXXVII | 353 |

LXXVIII | 354 |

LXXIX | 356 |

LXXX | 359 |

LXXXI | 360 |

LXXXII | 361 |

LXXXIII | 363 |

LXXXIV | 366 |

LXXXV | 369 |

LXXXVI | 375 |

LXXXVIII | 377 |

LXXXIX | 378 |

XC | 386 |

XCI | 392 |

XCII | 397 |

XCIII | 399 |

XCV | 401 |

XCVI | 406 |

XCVII | 413 |

XCVIII | 418 |

XCIX | 419 |

C | 421 |

CI | 425 |

CII | 427 |

431 | |

443 | |

### Common terms and phrases

abstract algorithm analyzer andalso application argument arithmetic associated AVL tree balance binary search tree binary trees bool btree CAML Cartesian product Chapter char stream compile complex compute configuration Constant construction constructors corresponding data structures defined definition denoted digits Division_by_zero doublet DUPL element environment Equiv evaluation evaluation strategy example Expr expression fun fact failwith Figure float fun x fun x y gentree grammar graph idea implementation infix int list int vect integer IntjConst isometry iter itjist let rec listjt LPAR ml_exp natural numbers node operation orelse pair parameter parser pattern matching possible produce programming languages quicksort recognizer recursive regexpr regular expression representation represented rewrite rotation rules Section semantics sequence stack string substitution subtree SWAP symbol symmetry group syntactic syntax tenv term tiling token fun transformation type int type scheme type synthesis type variable type_expr unification values of type