This preview shows pages 1–3. Sign up to view the full content.
How to Design Programs: An Introduction to Computing and Programming [Go to first, previous, next page; contents; index]Section 7The Varieties of DataThe previous section significantly expands our world of data. We must now deal with a universe that contains booleans, symbols, and structures of many kinds. Let's bring some order to this world.Up to this point, our functions have always processed subclasses of four different kinds of data:24numbers:representations of numeric information; booleans:truth and falsity; symbols:representations of symbolic information; and structures:representations of compounds of information. 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 can 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 how to protect our functions against such uses, when necessary. 7.1 Mixing and Distinguishing DataIn the preceding section, we used posnstructures with exactly two components to represent pixels. If many of the pixels are on the xaxis, we can simplify the representation by using plain numbers for those pixels and posnstructures for the remaining ones.Figure 16 contains a sample collection of such points. Three of the five points, namely, C, D, and E, are on the xaxis. Only two points require two coordinates for an accurate description: Aand B. Our new idea for representing points permits us to describe this class of points succinctly: (make-posn 6 6)for A; (make-posn 1 2)for B; and 1, 2, and 3 for C, D, and E, respectively.If we now wish to define the function distance-to-0, which consumes such point representations and produces their distance to the origin, we are confronted with a problem. The function may be applied to a number ora posn. Depending on the class to which the input belongs, distance-to-0must employ a different method to calculate the distance to the origin. Thus we need to use a cond-expression to distinguish the two cases. Unfortunately, we don't have any operations to formulate the appropriate conditions. [curriculum1ab-Z-G-1.gif]Figure 16:A small collection of points (1 of 13) [2/5/2008 4:44:15 PM]
has intentionally blurred sections.
Sign up to view the full version.