  A circular program contains a data structure whose definition is
self-referential or recursive. The use of such a definition allows efficient
functional programs to be written and can avoid repeated evaluations and the
creation of intermediate data structures that would have to be garbage
collected. This paper uses circular programs in various ways, to implement
memo-structures and explicit search-trees to hold solutions to
constraint-satisfaction problems.
