什么是Clojure相当于Ruby的选择?

时间:2010-07-20 23:37:01

标签: ruby clojure

我想返回范围为3或5的倍数的所有数字的列表/集合。

在Ruby中,我会做

(1..1000).select {|e| e % 3 == 0 || e % 5 == 0}

在Clojure中,我想我可能会做类似......

(select (mod 5 ...x?) (range 0 1000))

4 个答案:

答案 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)