【问题标题】:Loop in clojure with or condition使用或条件在clojure中循环
【发布时间】:2015-08-21 20:04:22
【问题描述】:

我正在尝试在 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)))
) 

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

我对函数式编程和 clojure 还很陌生,如果我想错了,请告诉我。

【问题讨论】:

    标签: function clojure clojurescript


    【解决方案1】:

    看看函数some,它接受一个谓词和一个集合作为参数,如果谓词对集合中的某些项目返回真,则返回真。

    (some #(>= % 3) [1 2 3 4]) ; => true
    (some #(>= % 3) [0 1 0 1]) ; => false
    

    您的方法的问题是for 返回一个真/假值序列,而or 需要多个单独的参数。仅给定一个参数,or 将返回该参数。你可以做的是reducefor返回的序列,像这样:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多