Function-level programming paradigm states that the program is built from elementary functions, combined with function-to-function operations (also called functionals or functional forms).
This paradigm doesn’t use the concept of variable or assignment, and instead concentrates on the study of elementary functions and functional forms.
Function-level paradigm uses the following hierarchy of entities within the language:
atomsare the actual pieces of data on which all functions operate. They appear only as the input and output of the programs, and nowhere inside. Atoms can be of scalar or set type.
functionsare tools which convert atoms to atoms. The language defines the initial set of functions, and the programmer can create new ones using functional forms. The program itself is a function.
functional formsare tools which convert functions to functions. The language defines the initial set of forms, and can either allow creation of new forms (FFP) or disallow it (FP). Thus, a function-level language defines an algebra of forms over the space of functions.
Function-level programming is the opposite of value-level programming and a constrained type of functional programming (constrained is the way new functions are defined).