]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: faster even-indices and odd-indices.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 29 Mar 2013 14:10:27 +0000 (07:10 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 29 Mar 2013 14:10:27 +0000 (07:10 -0700)
extra/sequences/extras/extras.factor

index aa2e169f8237fd79e6e9b40f416c0eddc7bd2bf8..31a0bbeebdf5fae67682b07e4baf709e402a265e 100644 (file)
@@ -90,9 +90,15 @@ IN: sequences.extras
 : filter-index ( ... seq quot: ( ... elt i -- ... ? ) -- ... seq' )
     over filter-index-as ; inline
 
-: even-indices ( seq -- seq' ) [ nip even? ] filter-index ;
-
-: odd-indices ( seq -- seq' ) [ nip odd? ] filter-index ;
+: even-indices ( seq -- seq' )
+    [ length 1 + 2/ ] keep [
+        [ [ 2 * ] dip nth-unsafe ] curry
+    ] keep map-integers ;
+
+: odd-indices ( seq -- seq' )
+    [ length 2/ ] keep [
+        [ [ 2 * 1 + ] dip nth-unsafe ] curry
+    ] keep map-integers ;
 
 : compact ( seq quot elt -- seq' )
     [ split-when harvest ] dip join ; inline