]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: experimenting with take-while and drop-while.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 26 Jan 2017 20:05:09 +0000 (12:05 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 26 Jan 2017 20:05:09 +0000 (12:05 -0800)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 28db9fb03f82b5093e5308a5ca53b490c70bae6d..8539c2ffce6da9589052ac0638c13895f0dc1d08 100644 (file)
@@ -245,3 +245,8 @@ IN: sequences.extras.tests
 { }
 [ "test:" all-words [ name>> over prepend ] map-zip 2drop ] unit-test
 
+{ { 0 1 2 3 } } [ 8 iota [ 4 < ] take-while ] unit-test
+{ { } } [ { 15 16 } [ 4 < ] take-while ] unit-test
+
+{ { 4 5 6 7 } } [ 8 iota [ 4 < ] drop-while ] unit-test
+{ { 15 16 } } [ { 15 16 } [ 4 < ] drop-while ] unit-test
index 8d2805473cbd0198f381e44334f91d35beb53ee7..1092be46b76ab1c9d38207bc5e529b08ba2d311e 100644 (file)
@@ -602,3 +602,9 @@ PRIVATE>
 
 : map-values ( assoc quot: ( value -- value' ) -- assoc )
     '[ swap _ dip swap ] assoc-map ; inline
+
+: take-while ( ... seq quot: ( ... elt -- ... ? ) -- head-slice )
+    [ '[ @ not ] find drop ] 2keep drop swap 0 or head-slice ; inline
+
+: drop-while ( ... seq quot: ( ... elt -- ... ? ) -- tail-slice )
+    [ '[ @ not ] find drop ] 2keep drop swap 0 or tail-slice ; inline