proc lintersect {a b} {
foreach e $a {
set x($e) {}
}
set result {}
foreach e $b {
if {[info exists x($e)]} {
lappend result $e
}
}
return $result
}
proc lunion {a b} {
foreach e $a {
set x($e) {}
}
foreach e $b {
if {![info exists x($e)]} {
lappend a $e
}
}
return $a
}
proc ldifference {a b} {
foreach e $b {
set x($e) {}
}
set result {}
foreach e $a {
if {![info exists x($e)]} {
lappend result $e
}
}
return $result
}
proc in {list element} {
expr {[lsearch -exact $list $element] != -1}
}MJ - Using 8.5 ni and in, this can be speeded up quite considerable, for instance:
proc ldifference2 {a b} {
set result {}
foreach e $a {
if {$e ni $b} {lappend result $e}
}
return $result
}