## The Algebra of ProgrammingThis is the 100th. book in the Prentice Hall International Series in Computer Science. It's main purpose is to show how to calculate programs. Describing an algebraic approach to programming based on a categorical calculus of relations, Algebra of Programming is suitable for the derivation of individual programs, and for the study of programming principles in general. The programming principles discussed are those paradigms and strategies of program construction that form the core of Algorithm Design. Examples of such principles include: dynamic programming, greedy algorithms, exhaustive search, and divide-and-conquer.The fundamentsl ideas of the algebraic approach are illustrated by an extensive study of optimisation problems. |

### What people are saying - Write a review

#### Review: Algebra of Programming

User Review - Hugo Sereno Ferreira - GoodreadsThis is a mind-blowing book. Mind you: if you come from a OO background, finishing the first chapter is enough for a brag-right. Notwithstanding, while reading this book, you'll have the constant feeling that programming will never be the same for you. Read full review

### Contents

Functions and Categories | 25 |

Applications | 55 |

Relations and Allegories | 81 |

Copyright | |

9 other sections not shown

### Common terms and phrases

allegory apply arrow assocl bagify bifunctor binary bmax Bool calculation catalist catamorphism chapter Char composition computing concat condition cons-lists converse coproducts coreflexive cost curry datatype decimal defined definition detab diagram digits dynamic programming element entab example exercise expression F-algebra F(id filter foldl foldn foldr functional programming functor functor F fusion law generalised glue greedy algorithm greedy theorem Horner's rule hylomorphism implementation inductive initial algebra inits integer isomorphism least fixed point list cons list+ listcp listl listr f minlist modular law monic monotonic natural numbers natural transformation non-empty obtain operator outl outr pair partition perm point-free prefix preorder proof Prove satisfying setify snoc snoc-lists solution specification step String subset succ tabulation tail terminal object thin Q thinlist Q tree type functor unique universal property wrap zero