为什么这些过滤器,一个使用AND,一个使用OR,在Clojure中评估相同的值?
以下是Clojure中使用和的过滤器:为什么这些过滤器,一个使用AND,一个使用OR,在Clojure中评估相同的值?,clojure,Clojure,以下是Clojure中使用和的过滤器: (filter #(and (= 0 (mod % 3) (mod % 5))) (range 100)) 它回来了,正如我所料 (0 15 30 45 60 75 90) 另一方面,这里是使用或代替AND的相同过滤器: (filter #(or (= 0 (mod % 3) (mod % 5))) (range 100)) 对我来说,它返回完全相同的列表是没有意义的,但确实如此。为什么列表中没有包含或返回 (3, 5, 6, 9, 10 ...)
(filter #(and (= 0 (mod % 3) (mod % 5))) (range 100))
它回来了,正如我所料
(0 15 30 45 60 75 90)
另一方面,这里是使用或代替AND的相同过滤器:
(filter #(or (= 0 (mod % 3) (mod % 5))) (range 100))
对我来说,它返回完全相同的列表是没有意义的,但确实如此。为什么列表中没有包含或返回
(3, 5, 6, 9, 10 ...)
?使用
=
时,它会查看传递给它的所有参数是否相等。在每个示例中,过滤器检查0=(mod%3)=(mod%5)
。相反,请分别检查每个案例:
(filter #(or (= 0 (mod % 3)) (= 0 (mod % 5))) (range 100))
你也可以考虑使用<代码> 0?< /代码>。我认为它使阅读变得更容易,并且有助于避免像这样的问题
(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 100))
@谢谢,这很有道理。