From a153d9f6adfcc1682a58e997f26fecfa45e97f61 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 29 Dec 2016 09:20:32 -0800 Subject: [PATCH] sequences.extras: simpler find-all and a test. --- extra/sequences/extras/extras-tests.factor | 2 ++ extra/sequences/extras/extras.factor | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index eef8d01888..6e906dec21 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -3,6 +3,8 @@ math math.vectors random sequences sequences.extras strings tools.test vectors vocabs ; IN: sequences.extras.tests +{ { { 0 104 } { 2 108 } { 3 108 } } } [ "hello" [ even? ] find-all ] unit-test + { { "a" "b" "c" "d" "ab" "bc" "cd" "abc" "bcd" "abcd" } } [ "abcd" all-subseqs ] unit-test { { "a" "ab" "abc" "abcd" "b" "bc" "bcd" "c" "cd" "d" } } diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index cc459ebead..aa901bd808 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -21,10 +21,8 @@ IN: sequences.extras :: combos ( list1 list2 -- result ) list2 [ [ 2array ] curry list1 swap map ] map concat ; -: find-all ( seq quot: ( elt -- ? ) -- elts ) - [ [ length iota ] keep ] dip - [ dupd call( a -- ? ) [ 2array ] [ 2drop f ] if ] curry - 2map sift ; inline +: find-all ( ... seq quot: ( ... elt -- ... ? ) -- ... elts ) + [ ] dip '[ nip @ ] assoc-filter ; inline : reduce-from ( ... seq identity quot: ( ... prev elt -- ... next ) i -- ... result ) [ swap ] 2dip each-from ; inline