clear-set
union!
diff!
+ intersect!
}
"To test if a set is the empty set:"
{ $subsections null? }
{ $description "Removes all members from " { $snippet "set1" } " contained in " { $snippet "set2" } "." }
{ $side-effects "set1" } ;
+HELP: intersect!
+{ $values { "set1" set } { "set2" set } }
+{ $description "Removes all members from " { $snippet "set1" } " not contained in " { $snippet "set2" } "." }
+{ $side-effects "set1" } ;
+
HELP: intersects?
{ $values { "set1" set } { "set2" set } { "?" "a boolean" } }
{ $description "Tests if " { $snippet "set1" } " and " { $snippet "set2" } " have any elements in common." }
[ HS{ 1 } ] [ HS{ 1 2 3 } HS{ 2 3 } diff! ] unit-test
[ HS{ 1 } ] [ HS{ 1 } HS{ 2 3 4 } diff! ] unit-test
[ HS{ 1 2 3 } ] [ HS{ 1 2 3 } HS{ 4 } diff! ] unit-test
+
+[ HS{ } ] [ HS{ } HS{ } intersect! ] unit-test
+[ HS{ 2 3 } ] [ HS{ 1 2 3 } HS{ 2 3 } intersect! ] unit-test
+[ HS{ } ] [ HS{ 1 } HS{ 2 3 4 } intersect! ] unit-test
+[ HS{ } ] [ HS{ 1 2 3 } HS{ 4 } intersect! ] unit-test
dupd sequence/tester [ dup ] prepose pick
[ delete ] curry [ [ drop ] if ] curry compose each ;
+: intersect! ( set1 set2 -- set1 )
+ dupd sequence/tester [ dup ] prepose [ not ] compose pick
+ [ delete ] curry [ [ drop ] if ] curry compose each ;
+
! Temporarily for compatibility
: unique ( seq -- assoc )