z*x y = z*x*x y-1
Therefore, the assignments to z and y keep the value of z*x y the same, so the
value of the first conjunct remains unchanged.
In both cases — y even and y odd— the repetend keeps the invariant true.
With the aid of the invariant, we have analyzed the algorithm and seen that
it is correct.
Activity 7-2.4 of the CD shows you a loop that draws spirals of 2000 line seg-
ments of increasing size, with successive lines being drawn in alternating colors
at the same angle. Change the angle, and you get radically different designs.
Watch the activity so that you can see the colorful and beautiful designs that arise
from this one loop. Amazingly different designs are drawn just by changing the
angle between successive lines.
On this black-and-white paper, we cannot do justice to the spirals that are
drawn, to the description of what each spiral consists of, or to the loop itself.
Therefore, we do not discuss the algorithm here. Look at it on the CD. Also,
obtain the program from the CD and run it yourself, experimenting with differ-
ent angles to see the designs that arise.
page 7-2 to ob-
tain this loop.
A schema is just a “generalized presentation or a framework of reference”. A
loop schema is a loop (with initialization) that performs an abstract task, like:
Process the natural numbers 0..n-1
whose repetend includes an abstract statement, like:
We can use such a schema in many ways. For example, suppose we need to count
the w 's in a String s . We need not program this from scratch. Instead, because
the characters are numbered 0 through s.length() - 1 , we can start with the
loop schema and refine it to fit the new task. We investigate this idea.
Schema to process natural numbers
We develop an abstract loop to sequence through the integers in 0 .. n-1 , for
some natural number n , processing each one in turn. This loop is abstract because
we do not say what it means to process a number.
The abstract loop should do this: