3

我想编写一个函数,该函数采用向量 [& x] 并将测试应用于元素对。输出测试认为相同的元素向量和 nil 元素向量。

我的第一个想法是获取向量并将它们展平。

(defn soup [& x]
    (vec (flatten x))

然后应用诸如相同的测试?否定?或类似的规定。正是在模式匹配的时候,我一直在尝试组装输出。

例如)输入 1:[:a :b :c :a :b :c]

输出 1: [[:a :a] [:b :b] [:c :c]]

输入 2:[[:a :b :c] [:a :b :c]]

输出 2:[[[:a :b :c] [:a :b :c]]]

如果输入 2 首先被展平,它会返回输出 1。

4

1 回答 1

4

将 sort 和 partition-by 结合起来会接近您的要求吗?

(->> [:a :b :c :a :b :c] sort (partition-by identity))
((:a :a) (:b :b) (:c :c)) 

(->> [[:a :b :c] [:a :b :c]] sort (partition-by identity))
(([:a :b :c] [:a :b :c]))

如果您需要它们成为向量之后:

(->> [:a :b :c :a :b :c] sort (partition-by identity) (map vec) vec)
[[:a :a] [:b :b] [:c :c]]

(->> [[:a :b :c] [:a :b :c]] sort (partition-by identity) (map vec) vec)
[[[:a :b :c] [:a :b :c]]]
于 2013-11-20T20:10:58.623 回答