Guest User

Untitled

a guest
Jun 19th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.61 KB | None | 0 0
  1. (defn sorted-intersection-with [f m1 m2]
  2. (assert (= (.comparator m1) (.comparator m2)))
  3. (let [cmpr (.comparator m1)]
  4. (loop [m1 (seq m1), m2 (seq m2), ret (transient {})]
  5. (if-not (and m1 m2)
  6. (persistent! ret)
  7. (let [[[k1 v1]] m1
  8. [[k2 v2]] m2
  9. c (.compare cmpr k1 k2)]
  10. (cond
  11. (zero? c) (recur (next m1) (next m2) (assoc! ret k1 (f v1 v2)))
  12. (neg? c) (recur (next m1) m2 ret)
  13. :else (recur m1 (next m2) ret)))))))
  14.  
  15. (let [a (sorted-map :a 1 :c 3 :e 5)
  16. b (sorted-map :a 1 :b 2 :d 4 :e 5)]
  17. (sorted-intersection-with + a b))
Add Comment
Please, Sign In to add comment