In the preceding section, we developed simple data representations of
family trees, Web pages, and Scheme expressions. Developing functions for
the corresponding data definitions was based on one and the same design
recipe. If we wish to develop more realistic representations of Web pages
or Scheme expressions, or if we wish to study descendant family trees
rather than ancestor trees, we must learn to describe classes of data that
are interrelated. That is, we must formulate several data definitions at
once where the data definitions not only refer to themselves, but they also
refer to other data definitions.