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

Bla*_*ere 3 ruby clojure

我想返回一个范围是3或5的倍数的列表/集合.

在Ruby中,我会这样做

(1..1000).select {|e| e % 3 == 0 || e % 5 == 0}
Run Code Online (Sandbox Code Playgroud)

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

(select (mod 5 ...x?) (range 0 1000))
Run Code Online (Sandbox Code Playgroud)

dby*_*rne 5

(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000))
Run Code Online (Sandbox Code Playgroud)

  • @nickik我想这取决于你的意思是"更好"?它更简洁,但效率也较低.您的代码每次都会评估整个表单.使用`或'允许表单为可被3整除的数字短路.此外,虽然您的代码更简洁,但我不相信它也更具可读性.有趣的想法,感谢输入. (2认同)

小智 5

另一种方法是生成解决方案,而不是过滤它:

(set (concat (range 0 1000 3) (range 0 1000 5)))
Run Code Online (Sandbox Code Playgroud)