目前我正在尝试将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)
分裂。但是我希望每个返回列表都没有余数。
我迷失了,创造了许多无法工作的分区功能。任何帮助表示赞赏。
答案 0 :(得分:0)
我将如何做到这一点:
(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)]
答案 1 :(得分:0)
将上面的标记标记为正确答案。我能够使用这种方法进一步将其分解为偶数列表。
(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分开。