Suppose I create a decently-sized persistent map, and then make a small 
change.  Clojure is extremely efficient at creating a second persistent map 
that shares most of its internal data with the first map, but 
clojure.data/diff appears to be unable to take advantage of that shared 
internal data -- instead it seems to just exhaustively compare the two 
trees.  

Comparing a map with itself: "Elapsed time: 0.155404 msecs"
Comparing two identical -- but separately-created maps -- "Elapsed time: 
43.687906 msecs"
Comparing a map and one with a small change thereof: "Elapsed time: 
378.754266 msecs"

Is there a way of comparing two maps that takes advantage of the internals 
of the commonality between maps "x" and "y" below?

Many thanks!!!

Marshall

(let [doDiff (fn[a b] (time
                       (let [delta (clojure.data/diff a b)]
                         [(first delta) (second delta)])))
      x      (into {} (map vec (partition 2 (range 100000))))
      x1     (into {} (map vec (partition 2 (range 100000))))
      y      (assoc x -1 -1)]
  [(doDiff x x)
   (doDiff x x1)
   (doDiff x y)])

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

Reply via email to