From 378feb5324c239c07daa198a711352abfa331f49 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 9 Aug 2012 12:49:29 -0700 Subject: [PATCH] sequences.extras: adding even and odd indices virtual sequences. --- extra/sequences/extras/extras-tests.factor | 8 +++++++ extra/sequences/extras/extras.factor | 28 +++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 69ac732dd7..3efcca70a9 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -110,3 +110,11 @@ IN: sequences.extras.tests { f } [ { } [ even? ] one? ] unit-test { { { 5 8 0 } { 6 9 1 } { 7 10 2 } } } [ { 5 6 7 } { 8 9 10 } [ 3array ] 2map-index ] unit-test + +{ { } } [ { } >array ] unit-test +{ { 0 2 } } [ 4 iota >array ] unit-test +{ { 0 2 4 } } [ 5 iota >array ] unit-test + +{ { } } [ { } >array ] unit-test +{ { 1 3 } } [ 5 iota >array ] unit-test +{ { 1 3 5 } } [ 6 iota >array ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 9270876266..5b748ebb2c 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -1,6 +1,6 @@ -USING: arrays grouping kernel locals math math.order math.ranges -sequences sequences.private splitting ; - +USING: accessors arrays grouping kernel locals math math.order +math.ranges sequences sequences.private splitting ; +FROM: sequences => change-nth ; IN: sequences.extras : reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline @@ -236,3 +236,25 @@ PRIVATE> : 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq ) pick [ (2each-index) ] dip map-integers ; inline + +TUPLE: evens seq length ; + +: ( seq -- evens ) + dup length 1 + 2/ evens boa ; inline + +M: evens length length>> ; inline + +M: evens nth-unsafe [ 2 * ] [ seq>> nth-unsafe ] bi* ; inline + +INSTANCE: evens immutable-sequence + +TUPLE: odds seq length ; + +: ( seq -- odds ) + dup length 2/ odds boa ; inline + +M: odds length length>> ; inline + +M: odds nth-unsafe [ 2 * 1 + ] [ seq>> nth-unsafe ] bi* ; inline + +INSTANCE: odds immutable-sequence