On Feb 14, 2012, at 12:51 AM, Erik Silkensen wrote:

> Instead of calling fib-less-than-n recursively, you could add a loop inside, 
> for example something like,
> 
> (define (fib-less-than-n n)
>   (define fib (mk-fib))
>   (let loop ([vs '()])
>     (let ([fib-val (fib)])
>       (if (>= fib-val n)
>           (reverse vs)
>           (loop (cons fib-val vs))))))

Let's generalize and abstract this to "take-while":

(define (take-while generator test?)
   (reverse
      (let loop [[vs '()]]
         (let [[value (generator)]]
            (if (test? value)
                (loop (cons value vs))
                vs)))))

(define (fib-less-than-n n)
   (take-while (mk-fib) (lambda (value) (< value n))))

[I haven't typed this code in and tested it, so there may be typos.]


Stephen Bloch
sbl...@adelphi.edu



____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to