clojure - Clojure 中的渐进式关联

标签 clojure

我今天遇到了一个我需要的东西,我想逐步关联 map 中的条目,每个条目都基于前一个(s)的结果。这是我所做的:

(defn -Y [v k f] (assoc v k (f v)))

(defn build-map [a-map]
 (-> a-map
  (-Y :x #(reduce + (:values %) )  )
  (-Y :y #(/ (:x %) 100) )
  (-Y :z #(* (:y %) 10000000) )
 )
)
(build-map {:values (range 8)})

我欢迎你的想法 a) 这是一件好事吗? b) 有没有我没见过的现有方法? (我不太了解API)

最佳答案

我认为 Ankur 的答案是对您的原始设计的一个很好的改进。

我只是想提一下,并不总是需要把事情复杂化。如果你在同一个函数中计算所有额外的 map 条目,我认为这种简单的方法更具可读性:

(defn build-map [a-map]
  (let [x (reduce + (:values a-map))
        y (/ x 100)
        z (* y 10000000)]
    (merge a-map {:x x :y y :z z})))

关于clojure - Clojure 中的渐进式关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427339/

相关文章:

Clojure:::标签的含义

clojure - 我可以使整个数据结构短暂/持久吗?

clojure - 为什么可以重新定义 Var(假设 FP 中的值是不可变的)?

clojure - lein repl错误:Connection refused

clojure - 在 clojure 中连接/合并单个向量中的向量

clojure + clojurescript 项目结构最佳实践

clojure - "->>"宏及迭代函数应用

clojure - clojurescript项目设置中没有这样的命名空间: clojure. spec.alpha

clojure - 从 incanter 数据集中获取列序列的惯用方法是什么?

postgresql - Clojure postgresql : how do I drop the database?