OK, I read some more and played around and got the behavior I wanted as follows:
(define primes-from-to (let ([lastend 0] [storedlst '()]) (lambda (start end) (cond [(= lastend 0) (set! storedlst (primes-to end))] [(= lastend start) (set! storedlst (sieve (append storedlst (interval-list start end))))] [(< lastend end) (primes-from-to lastend end)]) ; storedlst now has all the primes needed (set! lastend end) (filter (lambda (v) (if (and (>= v start) (<= v end)) #t #f)) storedlst) ))) Now lastend and storedlst are preserved between calls and I get the speed up I expected: > (time (primes-from-to 60000 60050)) cpu time: 6630 real time: 6694 gc time: 967 '(60013 60017 60029 60037 60041) > (time (primes-from-to 60000 60030)) cpu time: 0 real time: 1 gc time: 0 '(60013 60017 60029) I'd like to understand more about this, if anyone would care to enlighten me, I'd love to see more examples than I can find in the guide and reference. Thanks, -joe On Fri, Feb 17, 2012 at 9:05 PM, Joe Gilray <jgil...@gmail.com> wrote: > I've seen Eli's example of static variables on Stackoverflow, but I still > need help. > > I've created a working sieve and now I want to wrap it in a manner that > save primes to be used later. > > This is what I tried: > > ; wrapper function for sieve > (define (primes-from-to start end) > (let ([lastend 0] [storedlst '()]) > (lambda () > (cond [(= lastend 0) (set! storedlst (primes-to end))] > [(= lastend start) (set! storedlst (sieve (append storedlst > (interval-list start end))))] > [(< lastend end) (primes-from-to lastend end)]) > > ; storedlst now has all the primes needed > (set! lastend end) > (filter (lambda (v) (if (and (>= v start) (<= v end)) #t #f)) > storedlst) > ))) > > It works, but I can't get any speed advantages as I simply don't know how > to syntactically vary start and end and save lastend and storedlst. > > (define a (prime-from-to 100 200)) is not useful when I want to later call > (a 50 70). > > I read the manual about all the define* functions but really nothing seems > to fit, what am I missing? > > Thanks, > -joe >
____________________ Racket Users list: http://lists.racket-lang.org/users