diff --git a/extra/math/extras/extras.factor b/extra/math/extras/extras.factor index d8ee57d69d..bdc92c300b 100644 --- a/extra/math/extras/extras.factor +++ b/extra/math/extras/extras.factor @@ -155,15 +155,15 @@ PRIVATE> : until-zero ( n quot -- ) [ dup zero? ] swap until drop ; inline -: sum-cum-sum ( seq -- sum sum-of-cumulative-sum-of-seq ) - [ 0 0 ] dip [ '[ _ + ] dip dupd + ] each ; inline +: cum-reduce ( ... seq identity quot: ( ... prev elt -- ... next ) -- ... result cum-result ) + [ dup rot ] dip dup '[ _ curry dip dupd @ ] each ; inline <PRIVATE :: (gini) ( seq -- x ) seq natural-sort :> sorted seq length :> len - sorted sum-cum-sum :> ( a b ) + sorted 0 [ + ] cum-reduce :> ( a b ) b len a * / :> B 1 len recip + 2 B * - ;