Empty children and Clojure zippers -


why last expression retruns

{:a :foo, :args [{:id :xx}], :id :xx}

instead of:

{:a :foo, :args [], :id :xx}

(require '[clojure.zip :as zip])  (defn my-zipper [tree]   (zip/zipper     (fn branch? [node]       (:args node))     (fn children [node]       (:args node))     (fn make-node [node children]       (assoc node :args (vec children)))     tree))  (def z (my-zipper {:a :foo :args []}))  (loop [loc z]   (if (zip/end? loc)     (zip/node loc)     (recur       (zip/next           (zip/edit loc #(assoc % :id :xx)))))) 

it looks problem associated fact traversing zip/next reveals there 2 nodes :

(zip/node (zip/next z))             ;  => nil (zip/node (zip/next (zip/next z)))  ;  => {:a :foo :args []}  

why that? there single node empty children there should 1 node, correct?

after looking @ code of clojure.zip/vector-zip conclude lack of node's children should communicated nil. empty sequence doesn't work. children function should be:

(fn children [node]       (seq (:args node))) 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -