Abstract

It is argued that a programming style based on higher order techniques---the use of procedures that have other procedures as arguments and/or results---can be most effectively employed if ffl it is driven by abstraction from real algorithms, rather than attempting to work with a fixed set of functional forms; and ffl the use of imperative forms and mutative procedures is permitted (even encouraged! ), rather than restricting to a purely applicative style. A sequence of examples is presented illustrating a number of higher order techniques--- operators, iterators, accumulation, reduction, parallel reduction---and their effective use in conjunction with mutative procedures. The examples culminate with an interesting family of sorting algorithms, illustrating how higher order techniques can lead naturally to new algorithms. 1 Introduction The central idea of higher order programming is the use of higher order procedures; i.e., procedures that take other procedures as arguments and/or r...