How to Design Programs: An Introduction to Computing and Programming [Go to first, previous, next page; contents; index]Section 15Mutually Referential Data DefinitionsIn the preceding section, we developed data representations of family trees, Web pages, and Scheme expressions. Developing functions for these 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 also refer to other data definitions.15.1 Lists of Structures, Lists in StructuresWhen we build a family tree retroactively, we often start from the child's perspective and proceed from there to parents, grandparents, etc. As we construct the tree, we write down who is whose child rather than who is whose parents. We build a descendant family tree. Drawing a descendant tree proceeds just like drawing an ancestor tree, except that all arrows are reversed. Figure 40 represents the same family as that of figure 35, but drawn from the descendant perspective. [curriculum2-Z-G-3.gif]Figure 40:A descendant family treeRepresenting these new kinds of family trees and their nodes in a computer requires a different class of data than do the ancestor family trees. This time a node must include information about the children instead of the two parents. Here is a structure definition: (define-struct parent (children name date eyes))The last three fields in a parent structure contain the same basic information as a corresponding child structure, but the contents of the first one poses an interesting question. Since a parent may have an arbitrary number of children, the childrenfield must contain an undetermined number of nodes, each file:///C|/Documents%20and%20Settings/Linda%20Graue...How%20to%20Design%20Programs/curriculum-Z-H-20.html (1 of 12) [2/5/2008 4:47:18 PM]
This preview has intentionally blurred sections.
Sign up to view the full version.