Clojure 如何从循环中收集数据
大家好,如何从循环中的if条件收集数据Clojure 如何从循环中收集数据,clojure,Clojure,大家好,如何从循环中的if条件收集数据 (defn update-f [a b] (let[data(loop [i 0] (when (< i (count a)) ;;(println i) (if (every? (set b) (nth (for [x a] (set (list x))) i)) (nth (for [x a] (conj x "new")) i)
(defn update-f [a b]
(let[data(loop [i 0]
(when (< i (count a))
;;(println i)
(if (every? (set b) (nth (for [x a] (set (list x))) i))
(nth (for [x a] (conj x "new")) i)
(nth (for [x a] (conj x "old")) i))
(recur (inc i))))])); loop i will take this value
(defn更新-f[a b]
(let[data(loop[i0]
(当(
如果需要从该函数获取数据,我可以从条件中打印数据您可以通过添加额外的“累加器”参数在循环中收集数据:
(loop [i 0 acc []]
(if (< i 5)
(recur (inc i) (if (even? i)
(conj acc i)
acc))
acc))
我们正在映射a
中的每个项目,以向其添加:new
或:old
标记。集合还充当函数,当参数存在于集合中时,该函数返回真实值。因此,要查找项目i
是否已在集合b
中,我们只需执行(b i)
您可以测试它:
(let [r (are-new? [[1 2 3] [2 3 4] [1 2]] #{[1 2 3] [1 2]})]
(doseq [i r]
(println i)))
> [[1 2 3] :new]
> [[2 3 4] :old]
> [[1 2] :new]
您需要“获取”哪些数据?此外,如果您可以添加一些示例输入以及预期的输出,这将非常有用。输入(def a(list[22 23 24][23 25 26][27 23 24]))(def b(list[22 23 24][23 25 26]))输出(core/update-f a b)[22 23 24 new 23 25 26 new][27 23 24 old]nil@gokul,您应该编辑您的问题并在那里添加示例
(let [r (are-new? [[1 2 3] [2 3 4] [1 2]] #{[1 2 3] [1 2]})]
(doseq [i r]
(println i)))
> [[1 2 3] :new]
> [[2 3 4] :old]
> [[1 2] :new]