Ever? Or for the purpose discussed earlier? On Sep 9, 2013 7:17 AM, "Matthias Felleisen" <[email protected]> wrote:
> > I wonder whether you really want lazy streams. -- Matthias > > > > On Sep 9, 2013, at 10:19 AM, Lawrence Woodman wrote: > > > On 09/09/13 07:19, Stephen Chang wrote: > >> Konrad's exactly right. Your filtered-nums blows up because you named > >> the stream and then traversed the entire thing. In general, if you > >> hang onto the head of the stream while traversing then the GC can't > >> collect anything because since you have a pointer to the head, every > >> element of the stream is still reachable. > >> > >> Compare to a common traversal pattern like: > >> > >> (let loop ([s <some stream>]) ... (loop (stream-rest s))) > >> > >> where the head is dropped on each loop iteration. > >> > >> Other comments: > >> - (stream-length (gen-filtered-nums)) is fine because there's no > >> pointer to the head, so the GC collects as you traverse. > >> > >> - in-range is fine because it's constant space and not a > >> cons-cell-based stream. It's more like a generator. > >> > >> - the for/sum is actually collecting while traversing, just more > >> slowly. I'm not exactly sure why, I may look into it. On my machine, > >> it got up to 500mb or so but it finished. > > > > Thanks, and to Konrad too. You're mention of in-range being more > > like a generator, actually makes me wonder whether a generator would > > be a better choice for processing large data sets, from databases and > > csv files, sequentially. What do you think? > > > > > > Lorry > > > > -- > > vLife Systems Ltd > > Registered Office: The Meridian, 4 Copthall House, Station Square, > Coventry, CV1 2FL > > Registered in England and Wales No. 06477649 > > http://vlifesystems.com > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users

