矢量的Clojure模式匹配

时间:2013-11-20 19:29:44

标签: clojure clojure-contrib

我想写一个带矢量的函数[& 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.

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]]]