代码之家  ›  专栏  ›  技术社区  ›  Blaine Lafreniere

clojure与ruby的select是什么等价物?

  •  3
  • Blaine Lafreniere  · 技术社区  · 15 年前

    我要返回一个范围内所有数字的列表/集合,这些数字是3或5的倍数。

    在鲁比,我会的。

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

    在Clojure,我想我可能会做一些像…

    (select (mod 5 ...x?) (range 0 1000))
    
    4 回复  |  直到 15 年前
        1
  •  5
  •   dbyrne    15 年前
    (filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000))
    
        2
  •  5
  •   bOR_    15 年前

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

    (set (concat (range 0 1000 3) (range 0 1000 5)))
    
        3
  •  3
  •   Rayne    15 年前
    (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))
    
        4
  •  1
  •   Jed Schneider    15 年前
    推荐文章