我想返回范围为3或5的倍数的所有数字的列表/集合。
在Ruby中,我会做
(1..1000).select {|e| e % 3 == 0 || e % 5 == 0}
在Clojure中,我想我可能会做类似......
(select (mod 5 ...x?) (range 0 1000))
答案 0 :(得分:5)
(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000))
答案 1 :(得分:5)
另一种方法是生成解决方案,而不是过滤它:
(set (concat (range 0 1000 3) (range 0 1000 5)))
答案 2 :(得分:3)
(filter #(or (= (mod % 5) 0) (= (mod % 3) 0)) (range 1 100))
是最直接的翻译。
(for [x (range 1 100) :when (or (= (mod x 5) 0) (= (mod x 3) 0))] x)
是另一种方法。
而不是做(= .. 0),你可以使用零?功能而不是。以下是修订后的解决方案:
(filter #(or (zero? (mod % 5)) (zero? (mod % 3))) (range 1 100))
答案 3 :(得分:1)