The Varieties of Data

The past section significantly expands our world of data. We must now deal with a universe that contains booleans, symbols, and structures of many different kinds. Let's bring some order to this world. We start with a summary:
numbers:
representations of numeric information;
booleans:
truth and falsity;
symbols:
representations of symbolic information; and
structures:
representations of compounds of information.
Thus far, our functions always processed symbols, numbers, subclasses of numbers, or classes of structures. On occasion, however, a function must process a class of data that includes both numbers and structures or structures of several different kinds. We learn to design such functions in this section. In addition, we learn how to protect functions from bad uses. Here a bad use means that some user might accidentally apply a function for drawing circles to a rectangle. Although we have agreed that such users violate our data definitions, we should nevertheless know a technique for protecting ourselves against them.