To clarify the last point. Say each seq has a method to create an
equivalent memoized seq, or return itself if memoization is not needed
(e.g. in-range). Memoized seq returns a memoizing iterator, that first
goes over previously calculated values, then starts storing newly
calculated values in seq as it calculates them. Interface for this is
a function stream-memoize :: seq -> seq. So

(let ([s2 (stream-map func s)])
  (for ([i s2]) ...)
  (for ([i s2]) ...))

calculates all values twice (but does not use additional memory), but

(let ([s2 (stream-memoize (stream-map func s))])
  (for ([i s2]) ...)
  (for ([i s2]) ...))

only calculates values once.

Eugene
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to