clojure"and"和"or"的非宏版本

pau*_*doo 7 clojure

是有非宏版本andorClojure中?

更新:在这种情况下,我不关心短路.

int*_*ted 8

or

函数some"返回coll中任何x的(pred x)的第一个逻辑真值,否则为nil."

所以,你可以使用(some identity coll)or.请注意,其行为会有所不同or,当最后一个值是false:它会返回nil这里or将返回false.

and

如果您不需要知道coll向量中最后一个表单的值,则可以使用(every? identity coll)for and.这将与and宏的行为不同,因为true如果它的所有参数都是真实的,它将返回.如果您需要最后一个表格的结果,请参阅larsmans的答案.

  • `every?`似乎是`和`的对应物. (4认同)

Fre*_*Foo 5

让我们land代表"逻辑和",然后他们很容易定义:

(defn land
  ([] true)
  ([x & xs] (and x (apply land xs))))
Run Code Online (Sandbox Code Playgroud)

或者,稍微接近标准and行为:

(defn land
  ([] true)
  ([x] x)
  ([x & xs] (and x (apply land xs))))
Run Code Online (Sandbox Code Playgroud)

同样的or.