我试图想出一种方法来通过将另一个映射中的函数应用于每个值来转换 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
函数,以便在该函数调用中使用适当的参数?