I keep needing to go to the last (rightmost) child of a loc (generally 
after appending it).
(Or I failed to spot the proper idiom.)

So I wrote last-child:
  (defn last-child [loc]
    (last (take-while identity (iterate zip/right (zip/down loc)))))

but it feels a bit overkill because of all this repeated calls to 
zip/right. I could write:

  (defn down-right
    "Returns the loc of the rightmost child of the node at this loc, or
    nil if no children"
    [loc]
      (let [[node path] loc
            cs (vec (zip/children loc))]
        (when (seq cs)
          (with-meta [(peek cs) {:l (pop cs)
                         :pnodes (if path (conj (:pnodes path) node) 
[node])
                         :ppath path
                         :r nil}] ^loc))))

but it would mess with zippers internals: I don't like to have that in 
user code.

Would it be a useful addition to clojure.zip?

Christophe


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