From 8cc29324fc1b47ac8f4c75c502aa46e2c79b4f10 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 5 Dec 2022 21:36:40 -0600 Subject: [PATCH] sequences: count is [ ] count-by, readd seq-copy-loop again --- core/sequences/sequences-tests.factor | 6 ++++-- core/sequences/sequences.factor | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index cb81cc16da..2c44ca94d3 100644 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -302,8 +302,10 @@ unit-test { 328350 } [ 100 [ sq ] map-sum ] unit-test -{ 50 } [ 100 [ even? ] count ] unit-test -{ 50 } [ 100 [ odd? ] count ] unit-test +{ 5 } [ { 1 f 3 f 5 f 7 f 9 f } count ] unit-test + +{ 50 } [ 100 [ even? ] count-by ] unit-test +{ 50 } [ 100 [ odd? ] count-by ] unit-test { { "b" "d" } } [ { 1 3 } { "a" "b" "c" "d" } nths ] unit-test { { "a" "b" "c" "d" } } [ { 0 1 2 3 } { "a" "b" "c" "d" } nths ] unit-test diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 7db35f65f9..4d5bc5219e 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -364,6 +364,16 @@ C: copier : subseq-unsafe ( from to seq -- subseq ) dup subseq-unsafe-as ; inline +: seq-copy-loop ( dst dst-i src src-i src-stop -- dst ) + 2dup >= [ + 4drop + ] [ + [ + [ copy-nth-of-unsafe ] 4keep + [ 1 + ] 2dip 1 + + ] dip seq-copy-loop + ] if ; inline recursive + PRIVATE> : subseq-as ( from to seq exemplar -- subseq ) @@ -732,6 +742,9 @@ PRIVATE> : nths ( indices seq -- seq' ) [ [ nth ] curry ] keep map-as ; +: nths-of ( seq indices -- seq' ) + swap nths ; inline + : any? ( ... seq quot: ( ... elt -- ... ? ) -- ... ? ) find drop >boolean ; inline @@ -1168,12 +1181,12 @@ M: repetition sum [ elt>> ] [ length>> ] bi * ; inline : map-sum ( ... seq quot: ( ... elt -- ... n ) -- ... n ) [ 0 ] 2dip [ dip + ] with-assoc each ; inline -: count ( ... seq quot: ( ... elt -- ... ? ) -- ... n ) - [ 1 0 ? ] compose map-sum ; inline - : count-by ( ... seq quot: ( ... elt -- ... ? ) -- ... n ) [ 1 0 ? ] compose map-sum ; inline +: count ( ... seq -- ... n ) + [ ] count-by ; inline + : cartesian-each ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ) -- ... ) [ with each ] 2curry each ; inline -- 2.34.1