How about replacing
  (drop-last sibs)
with
  (remove vector? sibs)
?

remove will not access the next seq member in advance and the only
vector in sibs is the last element. I tried this change and it works
for the test code from the original post.

On Feb 12, 4:43 pm, Chouser <chou...@gmail.com> wrote:
> On Sat, Feb 12, 2011 at 4:16 AM, Marko Topolnik
>
> <marko.topol...@gmail.com> wrote:
> >> > Just guessing, but is it something to do with this (from the docstring
> >> > of parse-seq)?
>
> >> > "it will be run in a separate thread and be allowed to get
> >> >  ahead by queue-size items, which defaults to maxint".
>
> > As I've figured it out, when there's XPP on the classpath, and I'm
> > using it, the code that does the parsing is entirely different and
> > does not involve a separate thread (see with_pull.clj). The parser
> > sits and waits for events to be requested from the lazy seq.
>
> Yes, XPP is superior to SAX, especially for this sort of laziness.
>
> >> Finally, you might want to be able to walk an XML document larger
> >> than would fit in memory.  I'm not sure if lazy-xml has ever been
> >> able to do this as it would need to be vigilant about not
> >> retaining the root of the returned document tree.
>
> > I was under the impression that if the client was careful to lose the
> > nodes' parents, they would be free for garbage collection, as well as
> > previous siblings. The point is to first navigate to the
> > desired :content lazy seq and then lose all other refs. Then you are
> > in the same position as with any old lazy seq -- you run through it
> > without retaining the head, and things are good.
>
> It may work, but wasn't a design goal when I was originally writing
> lazy-xml, so it's possible I have stray head- or root-holding in the
> code.
>
> The problem you're observing is because of my use of drop-last, which
> forces the parsing of one extra sibling at *each* level of the tree.
> In your test case, this is a *lot* of extra parsing at exactly the
> point where you don't want it.  The drop-last is used because the last
> node of each interior sequence holds the non-descendant events and so
> must be dropped from the content seq.
>
> I'm currently trying to come up with a different way of passing around
> the non-descendant events so that drop-last isn't necessary, but it's
> ...tricky, at least for my poor fuzzy brain.
>
> --Chouserhttp://joyofclojure.com/

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