The Algebra of Programming (Prentice-Hall International Series in Computer Science)
Describes an algebraic approach to programming that permits the calculation of programs.  Introduces the fundamentals of algebra for programming. Presents paradigms and strategies of program construction that form the core of Algorithm Design. Discusses functions and categories; applications; relations and allegories; datatypes; recursive programs, optimization issues, thinning algorithms, dynamic programming and greedy algorithms. Appropriate for all programmers.