[racket] Advice: simulating stateful API in functional setting

From: Stephen Bloch (sbloch at adelphi.edu)
Date: Sat Jul 16 10:27:48 EDT 2011

On Jul 16, 2011, at 12:46 AM, Nadeem Abdul Hamid wrote:

> Ah, right. How about you keep the picture separate, and functions like 'move', 'rotate', etc. add to a list in the sprite structure; when the sprite structure is passed to the draw handler, the draw handler updates the picture based on those new segments or whatever, and then clears them from the sprite's list.

Wait: so now instead of "move" mutating the picture, "draw" is mutating the sprite?  Out of the frying pan into the fire....

> This way you don't have to conflate the sprite with the picture, nor do you have to worry about efficiency w.r.t. redrawing the entire history of the sprite movement every draw update. Tests for the 'tick' handler can be written in a functional style since only the sprite structure is involved. ?

Not if the draw handler is mutating them behind the scenes.  I could have two sprites that look identical to me, but since one of them has been drawn more recently than the other, they're not really equal.

Stephen Bloch
sbloch at adelphi.edu

Posted on the users mailing list.