diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 1e5659cb14..d8f3bebdc8 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -336,3 +336,17 @@ PRIVATE> : reverse-as ( seq exemplar -- newseq ) [ (reverse) ] [ like ] bi* ; + +: assoc-reduce ( ... assoc identity quot: ( ... prev key value -- next ) -- ... result ) + [ first2 ] prepose reduce ; inline + +: reduce-keys ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result ) + [ drop ] prepose assoc-reduce ; inline + +: reduce-values ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result ) + [ nip ] prepose assoc-reduce ; inline + +: sum-keys ( assoc -- n ) 0 [ + ] reduce-keys ; inline + +: sum-values ( assoc -- n ) 0 [ + ] reduce-values ; inline +