我想写一个带矢量的函数[& 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.
答案 0 :(得分: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]]]