Clojure 如何从循环中收集数据

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)

大家好,如何从循环中的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)
                    (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]