dur*_*rai 3 clojure set subset
我有一个set元素列表.例:
'([0 1 2][1 2 3] [4 5 6] [5 6 7] [0 1 2 3] [4 5 6 7])
Run Code Online (Sandbox Code Playgroud)
我想删除子集 - [0 1 2] [1 2 3] [4 5 6] [5 6 7]- 最终的答案应该是'([0 1 2 3] [4 5 6 7]).
任何帮助是极大的赞赏.
提前致谢.
(defn to-superset [ coll ]
(loop [result () coll coll]
(if (empty? coll) result
(let [x (first coll)
xs (rest coll)]
(if (some #(clojure.set/subset? x %) xs)
(recur result xs)
(recur (cons x result) xs))))))
(to-superset '(#{0 1 2} #{1 2 3} #{4 5 6} #{5 6 7} #{0 1 2 3} #{4 5 6 7}))
Run Code Online (Sandbox Code Playgroud)
DEMO
user=> (to-superset '(#{0 1 2} #{1 2 3} #{4 5 6} #{5 6 7} #{0 1 2 3} #{4 5 6 7}))
(#{4 5 6 7} #{0 1 2 3})
Run Code Online (Sandbox Code Playgroud)