Collection >> #sum (was: Re: [squeak-dev] The Inbox:
Collections-ul.587.mcz)
Levente Uzonyi
leves at elte.hu
Wed Nov 19 12:38:47 UTC 2014
There was a thread[1] about this back in 2008 with some good points.
I think it would be worth introducing #sumWithZero:. With that in the
image we could change Collection >> #sum as you suggested with a more
explicit comment. It could state that it's intended to be used only with
Collections containing Numbers only, and #sumWithZero: should be used in
every other case.
Levente
[1] http://lists.squeakfoundation.org/pipermail/squeak-dev/2008-August/130592.html
On Tue, 18 Nov 2014, Eliot Miranda wrote:
>
>
> On Tue, Nov 18, 2014 at 3:08 PM, Levente Uzonyi <leves at elte.hu> wrote:
> Hi All,
>
> The reason why I put this into The Inbox instead of The Trunk is that it changes the behavior of #sum when the Interval is empty.
> The current implementation raises an error - which is correct for a Collection which may contain any object - but I think for Intervals the preferred behavior is to return 0. Any objections?
>
>
> I want to add a non-objection, an anti-objection, or whatever will cause you to put this in trunk ;-) Clearly the bug is in the original sum. It should read
>
> sum
> "Compute the sum of all the elements in the receiver"
>
> ^self isEmpty ifTrue: [0] ifFalse: [self reduce:[:a :b| a + b]]
>
> Levente
>
> On Tue, 18 Nov 2014, commits at source.squeak.org wrote:
>
> A new version of Collections was added to project The Inbox:
> http://source.squeak.org/inbox/Collections-ul.587.mcz
>
> ==================== Summary ====================
>
> Name: Collections-ul.587
> Author: ul
> Time: 18 November 2014, 11:53:01.797 pm
> UUID: 30ba8551-0c97-4cf5-b830-9386f272b8d2
> Ancestors: Collections-ul.586
>
> Optimized Interval >> #sum.
>
> =============== Diff against Collections-ul.586 ===============
>
> Item was added:
> + ----- Method: Interval>>sum (in category 'accessing') -----
> + sum
> + "Optimized version. Use the sum(n*i - k, i=a..b) = -1/2*(a - b - 1)*(n * (a + b) - 2 * k) equation with a = 1, n = step, b = self size."
> +
> + | b |
> + b := self size.
> + ^b * ((b + 1) * step - (step - start * 2)) / 2!
>
>
>
>
>
>
>
> --
> best,Eliot
>
>
More information about the Squeak-dev
mailing list
|