Anonymous user
Set consolidation: Difference between revisions
→{{header|C sharp}}
SqrtNegInf (talk | contribs) m (→{{header|Sidef}}: Fix link: Perl 6 --> Raku) |
|||
Line 573:
Sets consolidated using Set operations:
{H, I, K, F, G}, {A, B, D, C}</pre>
=={{header|Clojure}}==
<lang Clojure>(defn consolidate-linked-sets [sets]
(apply clojure.set/union sets))
(defn linked? [s1 s2]
(not (empty? (clojure.set/intersection s1 s2))))
(defn consolidate [& sets]
(loop [seeds sets
sets sets]
(if (empty? seeds)
sets
(let [s0 (first seeds)
linked (filter #(linked? s0 %) sets)
remove-used (fn [sets used]
(remove #(contains? (set used) %) sets))]
(recur (remove-used (rest seeds) linked)
(conj (remove-used sets linked)
(consolidate-linked-sets linked)))))))</lang>
{{out}}
<pre>
(consolidate #{:a :b} #{:c :d}) ; ==> (#{:c :d} #{:b :a})
(consolidate #{:a :b} #{:c :b}) ; ==> (#{:c :b :a})
(consolidate #{:a :b} #{:c :d} #{:d :b}) ; ==> (#{:c :b :d :a})
(consolidate #{:h :i :k} #{:a :b} #{:c :d} #{:d :b} #{:f :g :h})
; ==> (#{:c :b :d :a} #{:k :g :h :f :i})
</pre>
=={{header|Common Lisp}}==
|