More Self-referential Data Definitions

external ~<#15890#>This part introduces students to several interesting and important variations of the design recipe for recursive data definitions. It also illustrates how the design recipe generalizes to mutually referential data definitions. Finally, it covers functions that consume two (or more) complex arguments. This part is critical for understanding data structures.<#15890#> Lists and natural numbers are two classes of data whose description requires self-referential data definitions. Both data definitions consist of two clauses; both have a single self-reference. Many interesting classes of data, however, require more complex definitions than that. Indeed, there is no end to the variations. It is therefore necessary to learn how to formulate data definitions on our own, starting with informal descriptions of information. Once we have those, we can just follow a slightly modified design recipe for self-referential data definitions.