sets: adding diff!.

db4
John Benediktsson 2013-03-08 08:21:16 -08:00
parent ffd03ec922
commit 66165f3660
3 changed files with 15 additions and 0 deletions

View File

@ -26,6 +26,7 @@ ARTICLE: "set-operations" "Operations on sets"
delete
clear-set
union!
diff!
}
"To test if a set is the empty set:"
{ $subsections null? }
@ -168,6 +169,11 @@ HELP: union!
{ $description "Adds all members from " { $snippet "set2" } " to " { $snippet "set1" } "." }
{ $side-effects "set1" } ;
HELP: diff!
{ $values { "set1" set } { "set2" set } }
{ $description "Removes all members from " { $snippet "set1" } " 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." }

View File

@ -135,3 +135,8 @@ M: null-set members drop f ;
[ f ] [ { } intersection ] unit-test
[ HS{ } ] [ { HS{ } } intersection ] unit-test
[ HS{ 1 } ] [ { HS{ 1 2 3 } HS{ 1 } } intersection ] unit-test
[ HS{ } ] [ HS{ } HS{ } diff! ] unit-test
[ 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

View File

@ -159,6 +159,10 @@ M: sequence clear-set
: union! ( set1 set2 -- set1 )
?members over [ adjoin ] curry each ;
: diff! ( set1 set2 -- set1 )
dupd sequence/tester [ dup ] prepose pick
[ delete ] curry [ [ drop ] if ] curry compose each ;
! Temporarily for compatibility
: unique ( seq -- assoc )