From 9c4b3e7e43b8551c6ae37b0716cc8495e88d5731 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 17 Jul 2015 13:40:01 -0700 Subject: [PATCH] sequences: define a 2each-from, use each-from more. --- core/sequences/sequences.factor | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 8f6b0f20d9..36c757991d 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -433,6 +433,9 @@ PRIVATE> : each ( ... seq quot: ( ... x -- ... ) -- ... ) (each) each-integer ; inline +: each-from ( ... seq quot: ( ... x -- ... ) i -- ... ) + -rot (each) (each-integer) ; inline + : reduce ( ... seq identity quot: ( ... prev elt -- ... next ) -- ... result ) swapd each ; inline @@ -466,6 +469,9 @@ PRIVATE> : 2each ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ) -- ... ) (2each) each-integer ; inline +: 2each-from ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ) i -- ... ) + [ (2each) ] dip -rot (each-integer) ; inline + : 2reduce ( ... seq1 seq2 identity quot: ( ... prev elt1 elt2 -- ... next ) -- ... result ) [ -rot ] dip 2each ; inline @@ -572,7 +578,7 @@ PRIVATE> : interleave ( ... seq between quot: ( ... elt -- ... ) -- ... ) pick empty? [ 3drop ] [ [ [ drop first-unsafe ] dip call ] - [ [ bi* ] 2curry [ 1 ] 2dip (each) (each-integer) ] + [ [ bi* ] 2curry 1 each-from ] 3bi ] if ; inline @@ -964,11 +970,11 @@ PRIVATE> : map-reduce ( ..a seq map-quot: ( ..a elt -- ..b intermediate ) reduce-quot: ( ..b prev intermediate -- ..a next ) -- ..a result ) [ [ dup first ] dip [ call ] keep ] dip compose - swapd [ 1 ] 2dip (each) (each-integer) ; inline + swapd 1 each-from ; inline : 2map-reduce ( ..a seq1 seq2 map-quot: ( ..a elt1 elt2 -- ..b intermediate ) reduce-quot: ( ..b prev intermediate -- ..a next ) -- ..a result ) [ [ 2dup [ first ] bi@ ] dip [ call ] keep ] dip compose - [ -rot ] dip [ 1 ] 3dip (2each) (each-integer) ; inline + [ -rot ] dip 1 2each-from ; inline > ] [ len>> ] bi * ; inline : cartesian-product ( seq1 seq2 -- newseq ) [ { } 2sequence ] cartesian-map ; -: each-from ( ... seq quot: ( ... x -- ... ) i -- ... ) - -rot (each) (each-integer) ; inline -