用clojure或条件循环

Jon*_*ary 2 function clojure clojurescript

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

我写了这个方法

(defn contains-value-greater-or-equal-to-three [values]
    (or (for [x values] (>= x 3)))
) 
Run Code Online (Sandbox Code Playgroud)

但是对于向量[1 2 3 4],这只是屈服(false false true true); 我想要的是应用于这些值的'或'函数.

我对函数式编程和clojure很陌生,如果我以错误的方式思考这个问题,请告诉我.

Ter*_* D. 7

查看函数some,它将谓词和集合作为参数,如果谓词对集合中的某个项返回true,则返回true.

(some #(>= % 3) [1 2 3 4]) ; => true
(some #(>= % 3) [0 1 0 1]) ; => false
Run Code Online (Sandbox Code Playgroud)

您的方法的问题是for返回一个true/false值序列,同时or需要一些单独的参数.只给出一个参数,or将返回.你可以做的是reduce返回的序列for,如下所示:

(reduce #(or %1 %2) (for [x values] (>= x 3)))
Run Code Online (Sandbox Code Playgroud)

(因为or是一个宏,而不是一个函数,(reduce or ...)将无法工作.