[plt-scheme] I miss end-of-time...

From: Stephen Bloch (BLOCH at adelphi.edu)
Date: Thu Mar 11 14:34:02 EST 2010

In recent versions of the world/universe teachpacks, the "end-of-time" function has been removed.  This makes some animations considerably harder or more unnatural to write.

Try this: write an animation of a disk whose radius starts at 0 and grows by 1 pixel per second.  The animation stops when the user presses any key on the keyboard.

You could do this with a struct that contains a "quitting?" field, but my students won't see structs for several more weeks. So the model has to be just a number.  Now how could the key handler indicate, with a number, that the animation should stop?

Well, we could use a negative number, since it'll never go negative in the normal course of events... but since the draw handler is called after the tick/mouse/key handlers but before the stop-when handler, that means we're going to call a function that draws a disk of specified radius with a negative number, and it'll crash.  We could write the draw handler to check whether the number is negative before trying to draw a disk of that radius, but (a) that adds unnecessary complexity, and (b) my students won't see conditionals for another week and a half.

Alternatively, we could use a really large number, and just hope nobody runs the animation for long enough that the radius gets up to that point in the normal course of events.  And it has to be a small enough number that a disk of that size COULD be drawn, or the draw handler will crash again as above.

Or I guess we could use a fraction.  Which feels really weird and unnatural, and relies on the fact that the "circle" function rounds when you give it a fractional radius.

With an "end-of-time" function, it's trivial: the key handler ignores its parameters and calls "end-of-time".

Stephen Bloch
sbloch at adelphi.edu

Posted on the users mailing list.