这是在Clojure中使用AND的过滤器:
(filter #(and (= 0 (mod % 3) (mod % 5))) (range 100))
正如我所料,它会回归
(0 15 30 45 60 75 90)
另一方面,这是使用OR而不是AND的相同过滤器:
(filter #(or (= 0 (mod % 3) (mod % 5))) (range 100))
对我而言,它会返回完全相同的列表没有意义,但确实如此。为什么没有OR的列表返回
(3, 5, 6, 9, 10 ...)
答案 0 :(得分:4)
当您使用=
时,它会查看传递给它的所有参数是否相等。在每个示例中,过滤器检查是否0 = (mod % 3) = (mod % 5)
。相反,请分别检查每个案例:
(filter #(or (= 0 (mod % 3)) (= 0 (mod % 5))) (range 100))
您也可以考虑使用zero?
。我认为它使阅读更容易,并有助于避免像这样的问题。
(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 100))