]> gitweb.factorcode.org Git - factor.git/commitdiff
sets.extras: adding non-repeating.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 2 May 2013 23:36:43 +0000 (16:36 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 2 May 2013 23:37:31 +0000 (16:37 -0700)
extra/sets/extras/extras-tests.factor
extra/sets/extras/extras.factor

index c6ce2adf253cc8b545d38c2b58172a89e7289d7e..5cc06343a6e09b937bc650959101c12d56d955b1 100644 (file)
@@ -18,3 +18,7 @@ IN: sets.extras.tests
 { f } [ { 1 2 } { 1 2 } proper-subset? ] unit-test
 { f } [ { 1 2 3 } { 1 2 } proper-subset? ] unit-test
 { t } [ { 1 2 } { 1 2 3 } proper-subset? ] unit-test
+
+{ "abc" } [ "abc" non-repeating ] unit-test
+{ "abc" } [ "abcddd" non-repeating ] unit-test
+{ "" } [ "aabbcc" non-repeating ] unit-test
index 323db086b68ff8c09c438f1b11460fb7a6833f5d..a96c5a938aae71aea9b5e58e2ab5fd02bc64de9c 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2013 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel sequences sets ;
+USING: kernel locals sequences sets ;
 IN: sets.extras
 
 : setwise-xor ( seq1 seq2 -- set )
@@ -17,3 +17,11 @@ IN: sets.extras
 
 : disjoint? ( set1 set2 -- ? )
     intersects? not ;
+
+:: non-repeating ( seq -- seq' )
+    HS{ } clone :> visited
+    0 seq new-resizable :> accum
+    seq [
+        accum over visited ?adjoin
+        [ push ] [ remove! drop ] if
+    ] each accum seq like ;