I had a suspicion that something similar to this might be happening. As I said in the first message, including a doall on the filters prevented the issue from happening. I will relay this info back to my friend. Thanks for the help.
On Sep 3, 12:04 am, John Harrop <jharrop...@gmail.com> wrote: > On Wed, Sep 2, 2009 at 1:02 PM, tmountain <tinymount...@gmail.com> wrote: > > > Hi all - I've recently encouraged a friend to start learning Clojure, > > and he has written some basic Markov chaining code as a learning > > exercise. His code works fine with small sets of input data, but > > larger inputs have been causing a StackOverflowError. > > > I've taken a look at the code and suspect that the error may be caused > > by recurrent calls to filter occupying increasing amounts of stack > > space due to filter leaving closed-over locals hanging around. That > > being said, this is only a suspicion, I'm still learning the language > > myself, so I could be totally wrong. Wrapping the filter calls in > > doall seems to prevent the problem from happening, but performance is > > abysmal in that case. > > The problem is laziness: you have a loop/recur that layers on successive > filters. Then when you go to realize an element, it calls filter, which > calls filter, which calls filter ... however deep. Unfortunately, if you > apply successive lazy operations to a seq in a loop/recur you sort of lose > tail optimization because of this, and there doesn't seem to be a way to > make lazy operations that call other lazy operations tail-optimized. At > least, not yet. > > At least for now you will probably have to doall the seq every so many > iterations to avoid the stack overflow. If doing it every iteration kills > performance, you might try doing it every Nth for some value of N that's > reasonably large, but small enough to avoid the overflow. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---