]> gitweb.factorcode.org Git - factor.git/commitdiff
sets: adding diff!.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 8 Mar 2013 16:21:16 +0000 (08:21 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 8 Mar 2013 16:21:16 +0000 (08:21 -0800)
core/sets/sets-docs.factor
core/sets/sets-tests.factor
core/sets/sets.factor

index 2ec63b9fb8f247c2596af9726dda92436659c8da..2f45eb32df9eb158acfad5953eca83bb16a26e0a 100644 (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." }
index 1c1a93fe4db0af3d0bf3ecd82392a9da8cf4bc02..3874402f6ad451947eb8bdb10e80952d931616d3 100644 (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
index 7ba14c08ba80d573d1c21c77d218252579238e45..6528b393eba9a37cf420da0e04bbd7bf2478d1cd 100644 (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 )