Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这些过滤器,一个使用AND,一个使用OR,在Clojure中评估相同的值?_Clojure - Fatal编程技术网

为什么这些过滤器,一个使用AND,一个使用OR,在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 ...)

以下是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 ...)

使用
=
时,它会查看传递给它的所有参数是否相等。在每个示例中,过滤器检查
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))

@谢谢,这很有道理。