[racket] Making a Racket function "recallable"
On Feb 14, 2012, at 12:18 AM, Erik Silkensen wrote:
> Another option is you could turn change your fib function to be 'mk-fib' that returns a new instance of the fib function each time it's called:
>
> (define (mk-fib)
> (let ([n0 -1] [n1 1])
> (lambda ()
> (let ([next (+ n0 n1)])
> (set! n0 n1)
> (set! n1 next))
> n1)))
I frequently assign this sort of thing near the end of a first programming course. First, I have students write a function "next" which returns how many times it's been called. Then "next-color", which on successive calls returns "red", "orange", "yellow", "green", "blue", "violet", #f, #f, ... Then "make-lister", which on input (list "red" "orange" "yellow" "green" "blue" "violet") returns a function acting like "next-color".
One suggestion: I would have mk-fib take in two parameters specifying the initial values of fib, rather than always making them -1 and 1.
Stephen Bloch
sbloch at adelphi.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120214/99201295/attachment.html>