On Tue, Dec 13, 2011 at 10:14 PM, Simone Mosciatti <mweb....@gmail.com> wrote: > No, I'm sure to not use all the sequence, so I will follow your second > advice, but... > > Cause of my non-perfect english I've not really understand the last > part. > Who is the caller ? > You suggest something like this: > > (let [fl (clojure.java.io/reader "path/filename") > rd (lazy-reader fl)] > (do-my-operation-with-lazy-reader) > (.close fl)) > > ???
Pretty much, yes. The lazy-reader function will of course not call clojure.java.io/reader on its argument, instead just passing it directly to its internal function lr. And if (do-my-operation-with-lazy-reader) returns a lazy sequence that's backed by the lazy-reader sequence, then either it needs to be doall'd before (.close fl) or the responsibility for creating and closing the reader needs to be pushed up to *its* user. Generally, if dealing with data that might not fit in main memory you'd need to push the reader's lifetime management up to the level where you're not just wrapping the seq but reducing over it, searching it for an item (with something like (first (filter ...)) or (first (remove ...)) or (last ...) or (some ...)), or picking a limited sample (e.g. (take some-finite-number (filter foo (some-wrapped-lazy-reader-seq rdr)))). -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en