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
-~----------~----~----~----~------~----~------~--~---

Reply via email to