In this paper we present a new programming technique for lazy functional programming languages. The technique is embedded in a programming methodology which is based on divide and conquer: the division of problems into subproblems. Such a division will be represented by a call graph. A class of program schemes, which implement call graphs, is derived based on Johnsson’s approach to attribute evaluation in attribute grammars. The key idea is to consider the passing of arguments to functions and the return of results by functions in a call graph as the propagation of inherited and synthesized attributes, respectively, in an attribute grammar. The new technique is illustrated by several small examples and a case study: the design and implementation of a compiler generator.