Hello,

Am 16.10.2008 um 16:56 schrieb Chouser:

>> I'd like to propose a clojure.zip/goto function. It is basically
>> the inverse of the clojure.zip/path function, ie. it takes a
>> location and a path and walks through the zipper to the given
>> node and returns its loc.
Wouldn't each step of the path have to provide the entire sub-tree
at that point, in order for = to return true?  How would this be
useful?  Or am I misunderstanding something?

Ok. I see your point. I have to check the whole sub-tree to see
whether they are equal. So = was maybe a bit naive.

But then I don't see use of zip. Given an arbitrary node in a tree.
How do I go there? Yes, I can navigate left and right and up and
down. But how do I know, that I'm there, if I can't compare the
current node to the one I'm looking for?

So I need some external way of navigation. Maybe one can also
provide a function how to compare nodes. ad-hoc trees like
[1 [2 3] [[[4 5] 6] 7 8]] then only have identical? as a predicate,
which does not compare the whole tree. But for example a tree
representing some files doesn't need the whole node, but only a
label. /usr/bin/clojure. Three labels: "usr", "bin" and "clojure".
Together with the way they are composed they identify the node.
(Skipping the root node for some moment...)

(-> fs-tree-zip
    (goto ["usr" "bin" "clojure"])
    (edit rename "clj")
    root)

Giving an self-defined predicate would make this possible.

(zip/zipper (branch...) (children...) (make-node...)
            (fn [node needle] (= (. node fileName) needle))
            fs-root)

Or maybe a goto-by: (goto-by loc predicate path)?

I think the idea of the zipper is really awesome. It would be
exactly what I need, since it takes care of also reconstructing
the tree after editing it. But honestly I see a problem on how to
get to the actual place, where the editing should happen....

If there are some examples of zipper use, please point me there.

Sincerely
Meikel


Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to