©2007 Felleisen, Proulx, et. al.

For each of the following problems work out the solution in four different ways:

using the design recipe

modifying the previous solution by using an acumulator

implementing the solution using the Scheme loop

`foldl`

implementing the solution using the Scheme loop

`foldr`

**Problems:**

Problem 31.3.3 in HtDP

Problem 31.3.4 in HtDP

Compute the distance traveled along the given nonempty list of

`Posn`

sDetermine the minimum distance between two consecutive

`Posn`

s in a list of`Posn`

s that has at least two`Posn`

sConcatenate all

`String`

s in the given list of`String`

s

Your database records the names of students and for each student a
list of courses student is taking. It is sufficient to represent each
student just by the name (a `String`

) and to represent each
course by the course number (again just a `String`

).

Design the program that produces a roster for a given course from the given list of students. The roster is just a list of student names.

Write down the necessary data definitions - with examples of data

Design the solution in four different ways:

using the design recipe

modifying the previous solution by using an acumulator

implementing the solution using the Scheme loop

`foldl`

implementing the solution using the Scheme loop

`foldr`

A list of `Posn`

s represents a polygon that we can draw on a
canvas by drawing a line between every two consecutive `Posn`

s
and finally adding a line from the last point to the first one. We
assume that the polygon consists of at least three `Posn`

s.

Design the data to represent a polygon and make examples of data.

Design the function that will draw ths polygon on the canvas. Use the world teachpack. Consult the

*H*elp Desk if necessary.

Now work on a design of two polygons that will morph from the original
image to the final one as the time goes on. For examples, a hexagon
may morph into a triangle by *p*ulling in three of its points
until they lie on the line between the other two adjacent points.

Design two polygons,

`start`

and`finish`

, with the same number of`Posn`

s.Design the function

`morph-poly`

that for the given`start`

and`finish`

polygon and the given`factor`

that is a value between 0 and 1 produces a new polygon where each point lies between the corresponding two points of the original polygons.That means that for the

`factor`

with the value`0.5`

the resulting polygon will be exactly half-way between the`start`

and the`finish`

.Design a

`MorphWorld`

that will consist of the`start`

and`finish`

polygons, and a timer value`t`

that will on each tick draw the morphed polygon with the`factor`

value`t / 1000`

and increase the value of`t`

by one.**Extra Credit**Design a function that will generate the values for the factor from the timer value in such way that the polygon will keep morphing from the`start`

image to the`finish`

image and back again to the`start`

image in a continous loop.

Last modified: Thursday, September 6th, 2007 2:42:24pm

HTML conversion by TeX2page 20070609