]> gitweb.factorcode.org Git - factor.git/commitdiff
sets.extras: adding mapped-set.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 3 Jun 2014 17:13:51 +0000 (10:13 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 3 Jun 2014 17:13:51 +0000 (10:13 -0700)
extra/sets/extras/extras-tests.factor
extra/sets/extras/extras.factor

index 5cc06343a6e09b937bc650959101c12d56d955b1..49fa92decdf56cb36df664bd51ab752b183e9091 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2013 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: tools.test sets.extras ;
+USING: math sequences sets.extras tools.test ;
 IN: sets.extras.tests
 
 { { } } [ { } { } setwise-xor ] unit-test
@@ -22,3 +22,5 @@ IN: sets.extras.tests
 { "abc" } [ "abc" non-repeating ] unit-test
 { "abc" } [ "abcddd" non-repeating ] unit-test
 { "" } [ "aabbcc" non-repeating ] unit-test
+
+{ HS{ 0 10 20 30 40 } } [ 5 iota [ 10 * ] mapped-set ] unit-test
index 2963ad4559bb252f8b7109fe515e82f55cf6fe2a..f84958c2596924f1963365aaedaed8ad35b36984 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2013 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: assocs kernel locals sequences sequences.extras sets ;
+USING: assocs hash-sets kernel locals sequences
+sequences.extras sets ;
 IN: sets.extras
 
 : setwise-xor ( seq1 seq2 -- set )
@@ -28,3 +29,8 @@ IN: sets.extras
 
 : adjoin-at* ( value key assoc -- set )
     [ [ HS{ } clone ] unless* [ adjoin ] keep dup ] change-at ;
+
+: mapped-set ( ... seq quot: ( ... elt -- ... newelt ) -- ... set )
+    over length <hash-set> [
+        [ adjoin ] curry compose each
+    ] keep ; inline