Hi, not sure if it works here, but what about adapting advice from Stuart Halloway's Programming Clojure (pages 159-160, 'Losing your head') and use a function returning a sequence instead of a 'bound by let' name (the actual advice in the book is to use functions returning sequences instead of vars holding the head)? This is basically a delayed evaluation trick similar to your workaround with atoms.
On Fri, Nov 27, 2009 at 3:38 AM, David Brown <cloj...@davidb.org> wrote: > On Thu, Nov 26, 2009 at 05:05:17PM -0800, David Brown wrote: >>On Thu, Nov 26, 2009 at 04:00:34PM -0800, David Brown wrote: >> >>>For now, I'll do without the with-open, since in this particular case, >>>errors are going to be fairly fatal anyway. >> >>BTW, I still haven't been able to figure out how to write this >>function without hanging onto the collection across the call to >>'write-mapping'. > > Ugh, I have found a very ugly hack that works. > > It seems that the compiler only nulls out locals before a call in the > tail position, even if earlier calls don't reference the value any > more. > > So, I went down in my call-chain to the first function that uses the > sequence directly (in a doseq), and do something like this: > > (let [real-coll @coll] > (swap! coll (constantly nil)) > (doseq [item real-coll] ...)) > > I just have to wrap the collection in an atom up where I create it, > and make sure I never keep a reference to it around. > > David > > -- > 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 -- Miron Brezuleanu -- 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