Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. (def data [{:a 1 :b 2} {:a 3 :b 4}])
  2.  
  3. (defn f [m]
  4. {:c (* 200 (:a m))})
  5.  
  6. (defn g [m]
  7. {:d (+ 2 (:b m))})
  8.  
  9. (defn h [m]
  10. {:e (- (:a m) (:b m))})
  11.  
  12. (defn lomm
  13. "let over map merge
  14. (lomm f g h data) => (let [f-xs (map f data)
  15. g-xs (map g data)
  16. h-xs (map h data)]
  17. (map merge f-xs g-xs h-xs))
  18.  
  19. Example:
  20. `(def data [{:a 1 :b 2} {:a 3 :b 4}])
  21.  
  22. (defn f [m]
  23. {:c (* 200 (:a m))})
  24.  
  25. (defn g [m]
  26. {:d (+ 2 (:b m))})
  27.  
  28. (defn h [m]
  29. {:e (- (:a m) (:b m))})
  30.  
  31. (lomm f g h data)
  32. ;; => ({:c 200, :d 4, :e -1} {:c 600, :d 6, :e -1})`"
  33. [& more]
  34. (let [data (last more)
  35. f-xs (butlast more)
  36. partial-xs (map #(map % data) f-xs)]
  37. (apply map merge partial-xs)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement