Hi, guys! I have an issue with my function where I use zippers to modify data structure. The function modifies a tree (parsed grammar tree) to replace expressions with values from a given map. Sadly, the algorithm I came up with is pretty slow. I would appreciate if anyone can give me a hint on what would be the right approach to do what I'm trying to accomplish. Thanks!
(defn- transform-values [parse-tree values-map] "Replaces all expressions in parsed tree with values from a given map." (loop [loc (zip/vector-zip parse-tree)] (if (zip/end? loc) (zip/root loc) (if (zip/branch? loc) (let [id (last (zip/children loc))] (if (contains? values-map id) (recur (zip/next (zip/replace loc (zip/node [(get values-map id)])))) (recur (zip/next (zip/edit loc #(into [] (butlast %))))))) (recur (zip/next loc))) ))) (time (dotimes [_ 100000] (transform-values [:DIV [:ADD [:ID "P1" "exp_1"] [:ID "P2" "exp_2"] "exp_2419"] [:ID "P3" "exp_3"] "exp_2418"] {"exp_1" 100 "exp_2" 20 "exp_3" 5}))) "Elapsed time: 2317.491 msecs" -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.