使用或条件在 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 那个。你可以做的是 reduce
由 for
编辑的序列 return,像这样:
(reduce #(or %1 %2) (for [x values] (>= x 3)))
(因为 or
是宏,不是函数,所以 (reduce or ...)
不起作用。
我正在尝试用 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 那个。你可以做的是 reduce
由 for
编辑的序列 return,像这样:
(reduce #(or %1 %2) (for [x values] (>= x 3)))
(因为 or
是宏,不是函数,所以 (reduce or ...)
不起作用。