Clojure めも

DDDに出てきた、SharePie 関数型の方が似合うかなと思って、試してみたが。

(def pie-a {:a 10 :b 20 :c 30 :d 40})
(def pie-b {:a 1, :b 2, :c 3 :d 4})
(def pie-c {:b 200, :c 300})
(def pie-d {:a 1000, :b 2000, :c 3000 :d 4000})

(merge-with + pie-a pie-b pie-c)
(merge-with - pie-d pie-a pie-b)

(defn protated [amount pie]
  (def total
    (reduce  + (map (fn [k] (second k)) pie)))
  (apply hash-map (flatten (map (fn [w] [(first w)
                         (/ (* (second w) amount) total)]) pie))))
(protated 1000 pie-a)

(defn protated-merge [amount pie]
  (merge-with + pie (protated amount pie)))

(protated-merge 1000 pie-a)

こなれてない。