【问题标题】:Clojure Even List within even countsClojure 偶数列表中的偶数
【发布时间】:2017-12-04 20:37:24
【问题描述】:

目前我正在尝试将 clojure 中的列表划分为偶数的偶数分割。 解释一下。

我有

(def a '(1 2 3 4 5 6 7 8 9 10))

我想做的是给它一个分区函数并创建偶数列表。 因此,如果我要将列表分成 2,我希望它看起来像

((1 2 3 4 5 6) (7 8 9 10)) or 
((1 2 3 4)(5 6 7 8 9 10)) producing 2 lists with even counts.

或者如果我想将 4 分成偶数列表,它看起来像

((1 2)(3 4)(5 6)(7 8 9 10)) 

即使(ex. 2,4,8,16,32),我也将永远分裂。但我希望每个退货清单都有偶数,没有余数。

我不知所措,创建了许多分区函数,但都不起作用。任何帮助表示赞赏。

【问题讨论】:

    标签: list clojure partition


    【解决方案1】:

    我会这样做:

    (def a '(1 2 3 4 5 6 7 8 9 10))
    
    (defn trunc-to-even
      "Truncates a value the largest even int less than or equal to value"
      [val]
      (* 2 (Math/floor (/ val 2))))
    
    (defn even-lists [some-list]
      (let [half-even (trunc-to-even (/ (count some-list) 2))]
        (split-at half-even some-list )))
    
    (println (even-lists a))
    
    ;=>  [(1 2 3 4) (5 6 7 8 9 10)]
    

    【讨论】:

    • 如果我只分成两个,那效果很好。我希望能够配置分区。方法也适用于 2,4,6,8 个列表拆分,每个列表的计数值是偶数。
    【解决方案2】:

    将以上一项标记为正确答案。我能够使用这种方法将其进一步分解为偶数列表。

    (defn trunc-to-even
    "Truncates a value the largest int less than or equal to value"
      [val]
      (* 2 (Math/floor (/ val 2))))
    
    (defn split-2 [some-list]
      (let [half-even (trunc-to-even (/ (count some-list) 2))]
        (split-at half-even some-list )))
    
    (defn split-4 [x]
      (apply concat (pmap split-2(concat (split-2 x)))))
    

    这样做我可以继续在 8-16-32 分裂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      相关资源
      最近更新 更多