私は、各値に別のマップの関数を適用することによって、clojureハッシュマップを変換する方法を考え出そうとしています。これが私がこれまでに持っているものです:
(defn transform-map [m fm]
(into {} (for [[k v] m]
(let [mfn (get fm k identity)] [k (mfn v)])))
(def m {:a 0 :b 0 :c 0 :d 0})
(def fm {:a inc :b dec :c identity})
(transform-map m fm) ;=> {:a 1, :b -1, :c 0, :d 0}
これは問題なく機能しますが、各関数がキーの現在の値である単一の引数を取る場合に限ります。同じキーの値以外の値を使用する関数を関数マップに配置したい場合はどうなりますか?たとえば、キーの合計をキーに入れたいと:a
し:b
ましょ:d
う。
私は次のようなことを試すことができます:
(assoc fm :d (fn[a b] (+ a b)))
transform-map
しかし、関数呼び出しで適切な引数を使用するように関数を変更する方法はありますか?