Set consolidation: Difference between revisions

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}}==
Anonymous user