[Peter Lewerin] 2013-12-31: Find the difference of two lists, i.e. the list of elements that occur in list ''a'' but not in list ''b'' (and ''not'' the inverse of the intersection, i.e. the list of elements that occur in only one of the two lists). ====== package require Tcl 8.5 proc ldiff {a b} { lmap elem $a { expr {$elem in $b ? [continue] : $elem} } } ldiff {2 3 4 5 6 7 8 9 10} {2 3 5 7} # -> 4 6 8 9 10 ldiff {1 2 3} {2 3 4} # -> 1 ====== This command probably isn't very efficient. ---- Gotta move with the times, it's not 2013 anymore! The "new" `in` operator is more expressive than `lsearch -exact`, and, as I found today, quite a bit faster. So my old implementation gets retired (but I'll leave it here for pre-8.5 Tclers). ====== proc ldiff {a b} { lmap elem $a { expr {[lsearch -exact $b $elem] > -1 ? [continue] : $elem} } } ====== ---- '''[gkubu] - 2013-12-31 17:15:58''' see also [struct::set], http://tcllib.sourceforge.net/doc/struct_set.html (subcommand difference) <> Category Command