Set consolidation: Difference between revisions

→‎Tcl: Added implementation
(→‎Tcl: Added implementation)
Line 202:
else: r.append(x)
return r</lang>
 
=={{header|Tcl}}==
{{trans|Python}}
{{tcllib|struct::set}}
This uses just the recursive version, as this is sufficient to handle substantial merges.
<lang tcl>package require struct::set
 
proc consolidate {sets} {
if {[llength $sets] < 2} {
return $sets
}
 
set r [list {}]
set r0 [lindex $sets 0]
foreach x [consolidate [lrange $sets 1 end]] {
if {[struct::set size [struct::set intersect $x $r0]]} {
struct::set add r0 $x
} else {
lappend r $x
}
}
return [lset r 0 $r0]
}</lang>
Demonstrating:
<lang tcl>puts 1:[consolidate {{A B} {C D}}]
puts 2:[consolidate {{A B} {B D}}]
puts 3:[consolidate {{A B} {C D} {D B}}]
puts 4:[consolidate {{H I K} {A B} {C D} {D B} {F G H}}]</lang>
{{out}}
<pre>1:{A B} {C D}
2:{D A B}
3:{D A B C}
4:{H I F G K} {D A B C}</pre>
Anonymous user