Procedure abstraction is not easily achieved in languages such as Pascal, C or C++, however, in Scheme and J, functions are first class entities. They may be passed as arguments, assigned names and returned as values. Springer and Friedman [Sp 89] describe procedural abstractions in Scheme which solve classes of problems involving flat recursion of the top level elements of a list or deep recursion on all sub lists of a list.