[plt-scheme] The perfect teaching language--Is this too much to ask for?
Thanks. This has been on my todo list. I considered adding
(world? ...)
to big-bang descriptions and
(universe? ...)
to universe descriptions. -- Matthias
On Jun 15, 2009, at 9:52 AM, Stephen Bloch wrote:
>
> On Jun 13, 2009, at 7:04 PM, Todd O'Bryan wrote:
>
>> Have you never had a student try to return a number instead of a
>> posn?
>> Or (much more common and much more painful) in the chapters on binary
>> trees and family trees, students get confused about the kinds of
>> structures they're building and bury a mistake so deep in a structure
>> that by the time they get the error message it's not clear where they
>> painted themselves into a corner. These are the problems that they
>> spend ten or fifteen minutes staring at, and when I get there, I know
>> it's a type problem, but there are three or four functions, all with
>> working test cases that could have triggered the problem, and I have
>> to spend 5 minutes unwinding everything with them.
>
> One of the things I've run into frequently in student programs is
> event handlers (for world.ss) that return a different type of
> "world" than they took in. This doesn't generally produce an error
> message until the NEXT event, at which point the student gets an
> error message from a different handler that may be perfectly correct.
>
> Here's a suggestion: add to world (now universe) an optional
> "legal" handler (defaulting to (lambda (x) #t) ) that is applied to
> the model returned by every handler, before doing anything else
> with that model. If it returns false, the animation ends with an
> error message saying "Invalid world returned by ___ handler" (fill
> in the blank with "mouse", "tick", or "key").
>
> For example,
>
> ; The model for this animation is a non-negative number.
> (legal-when (lambda (r) (and (number? r) (>= r 0)))
>
> ; End the animation when the model exceeds 300.
> (stop-when (lambda (num) (> num 300)))
>
> ; Tick handler: add1
> (on-tick add1)
>
> ; Redraw handler:
> (on-redraw (lambda (r) (circle r "solid" "blue")))
>
> This would not only make it easier for students to find their bugs,
> but give them some actual code to write at the "choose a type for
> the model" step of the animation recipe. Students have a tendency
> to skip steps that don't produce code.
>
> Of course, enforced contracts would take care of the issue too, but
> I think we'll have to wait longer for them; this addition to
> "universe" could be in the next release.
>
> Stephen Bloch
> sbloch at adelphi.edu
>
>
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme