From a6614ee974aa770fc0a8e756acdb01542e5008ff Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 29 Mar 2013 07:10:27 -0700 Subject: [PATCH] sequences.extras: faster even-indices and odd-indices. --- extra/sequences/extras/extras.factor | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index aa2e169f82..31a0bbeebd 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -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 ; +: even-indices ( seq -- seq' ) + [ length 1 + 2/ ] keep [ + [ [ 2 * ] dip nth-unsafe ] curry + ] keep map-integers ; -: odd-indices ( seq -- seq' ) [ nip odd? ] filter-index ; +: 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