A Generalization of Backus' FP

We view Backus' FP as a framework consisting of a set of basic tools for programming in the functional style, which can accommodate a large number of changeable parts. We argue that functional forms logically belong to the latter because they are specific to the data type. To support a programming methodology based upon this view, we extend FP by introducing "fdef" — a facility for defining new functional forms, based upon the extended definitions of Backus. In an "fdef", the parameters of the form are specified on the left and the function that the functional form is to return as its result is written on the right. We use lazy evaluation instead of APPLY to implement this extension because we feel that APPLY is a hindrance to the algebraic style of proving FP programs. The significant feature of "fdef" is that algebraic laws can be generated from the definitions of functional forms.