From 6792ff748e32a4c1008481df80253779eb5165bc Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 5 Sep 2008 19:32:19 -0500 Subject: [PATCH] Move partition combinator into core --- core/sequences/sequences-tests.factor | 6 ++++++ core/sequences/sequences.factor | 9 +++++++++ extra/sequences/lib/lib.factor | 9 --------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index fa5a3aecfb..8d7a0469a0 100755 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -260,3 +260,9 @@ TUPLE: bogus-hashcode ; M: bogus-hashcode hashcode* 2drop 0 >bignum ; [ 0 ] [ { T{ bogus-hashcode } } hashcode ] unit-test + +[ { 2 4 6 } { 1 3 5 7 } ] [ { 1 2 3 4 5 6 7 } [ even? ] partition ] unit-test + +[ { 1 3 7 } ] [ 2 { 1 3 5 7 } remove-nth ] unit-test + +[ { 1 3 "X" 5 7 } ] [ "X" 2 { 1 3 5 7 } insert-nth ] unit-test diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index c70d15701e..2ce939d96f 100755 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -426,6 +426,15 @@ PRIVATE> : filter ( seq quot -- subseq ) over >r pusher >r each r> r> like ; inline +: push-either ( elt quot accum1 accum2 -- ) + >r >r keep swap r> r> ? push ; inline + +: 2pusher ( quot -- quot accum1 accum2 ) + V{ } clone V{ } clone [ [ push-either ] 3curry ] 2keep ; inline + +: partition ( seq quot -- trueseq falseseq ) + over >r 2pusher >r >r each r> r> r> tuck [ like ] 2bi@ ; inline + : monotonic? ( seq quot -- ? ) >r dup length 1- swap r> (monotonic) all? ; inline diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index a09b3d5b82..2eb3c44b42 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -135,15 +135,6 @@ PRIVATE> : power-set ( seq -- subsets ) 2 over length exact-number-strings swap [ switches ] curry map ; -: push-either ( elt quot accum1 accum2 -- ) - >r >r keep swap r> r> ? push ; inline - -: 2pusher ( quot -- quot accum1 accum2 ) - V{ } clone V{ } clone [ [ push-either ] 3curry ] 2keep ; inline - -: partition ( seq quot -- trueseq falseseq ) - over >r 2pusher >r >r each r> r> r> drop ; inline - : cut-find ( seq pred -- before after ) dupd find drop dup [ cut ] when ;