使用或条件在 clojure 中循环

Loop in clojure with or condition

我正在尝试用 clojure 编写一个函数,为向量中的每个值调用一个条件;该函数应该 return 应用于每个值的条件结果的或。例如,我有一个向量 [1 2 3 4] 和一个条件 (>= x 3),其中 x 是向量中的一个元素,那么函数应该 return 为真(类似 [0 1 0 1] 应该 return假)。

方法是我写的

(defn contains-value-greater-or-equal-to-three [values]
    (or (for [x values] (>= x 3)))
) 

但是对于向量 [1 2 3 4] 这只会产生 (false false true true);我想要的是应用于这些值的 'or' 函数。

我对函数式编程和 clojure 还很陌生,如果我的想法有误,请告诉我。

看看函数 some,它接受一个谓词和一个 collection 作为参数,并且 return 为真当且仅当谓词 return 为真collection.

中的某些项目
(some #(>= % 3) [1 2 3 4]) ; => true
(some #(>= % 3) [0 1 0 1]) ; => false

您的方法的问题在于 for return 是一系列 true/false 值,而 or 需要多个单独的参数。只给定一个参数,or 将 return 那个。你可以做的是 reducefor 编辑的序列 return,像这样:

(reduce #(or %1 %2) (for [x values] (>= x 3)))

(因为 or 是宏,不是函数,所以 (reduce or ...) 不起作用。