clojure中是否有一个函数可以执行以下操作:
(_ '(1 2 3 4 5)) => '((1 2) (2 3) (3 4) (4 5))
我很确定我早些时候遇到过这样的事情......不记得它是什么。
答案 0 :(得分:7)
您可以使用内置partition功能
来完成此操作> (partition 2 1 '(1 2 3 4 5))
((1 2) (2 3) (3 4) (4 5))
但是当人们要求“所有对”时,他们通常意味着“所有组合”。如果您需要所有组合 - 请使用math.combinatorics。
答案 1 :(得分:0)
像这样:
(defn pairs [coll]
(map list coll (next coll)))
(pairs '(1 2 3 4 5))
;;=> ((1 2) (2 3) (3 4) (4 5))
答案 2 :(得分:0)
对于所有对都有combinatorics更通用的解决方案(但我知道这不是你的例子所做的)。
Clojure=> (combinations '(a b c) 2)
((a b) (a c) (b c))
Clojure=> (combinations '(a b c d e) 3)
((a b c) (a b d) (a b e) (a c d) (a c e) (a d e) (b c d) (b c e) (b d e) (c d e))