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

From: engineer at alum.mit.edu (engineer at alum.mit.edu)
Date: Thu Mar 11 15:05:19 EST 2010

One of my students has the habit of tying his "k" key to (exit).  It gives
him a quick non-mousy way to close his world and state windows
simultaneously.  I just tried it.  It works but leaves Dr. Scheme in a weird
state.  The Definitions window works and is immediately runnable and/or
editable, but the Interactions window is disabled.  I wouldn't like the
Interactions window being disabled all the time, and I don't know what other
ramifications there may be to ending a World by (exit)-ing.  But it serves
my student's purposes.


-----Original Message-----
From: plt-scheme-bounces at list.cs.brown.edu
[mailto:plt-scheme-bounces at list.cs.brown.edu] On Behalf Of Stephen Bloch
Sent: Thursday, March 11, 2010 2:34 PM
To: PLT-Scheme Mailing List
Subject: [plt-scheme] I miss end-of-time...

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

  For list-related administrative tasks:

Posted on the users mailing list.