[Cuis-dev] Bag>>#sum:ifEmpty:

Andres Valloud ten at smallinteger.com
Wed Nov 2 22:25:30 PDT 2022


The message #sum: seemingly assumes the presence of a ring where the 
messages + and * are coordinated.

On 11/2/22 9:57 PM, Luciano Notarfrancesco via Cuis-dev wrote:
> Yes, the method assumes the block is a function (it maps one element to 
> only one value). We talked about this here a couple of times. The 
> Collection protocol is very “functional”, specially messages like 
> #collect:, #select:, #detect:, etc, and using them with blocks that are 
> functions is the most natural way to use them, and I don’t think we 
> loose anything by making the assumption that the blocks for these 
> messages are functions.
> Moreover, the whole point of Bag is to be able to efficiently store 
> elements with lots of repetitions, possibly millions of repetitions that 
> otherwise wouldn’t even fit in memory. If #sum: iterated over all the 
> repetitions it would defeat the original purpose of Bag. And I argue 
> that this is not necessary because no one would ever call #sum: with a 
> block that is not a function, at least I never had the need to do that, 
> and it feels unnatural to use #sum: in that way and I’d use #do: instead.
> If you think this assumption is strange, think about all the other 
> assumptions that collections make. For example, you cannot change a 
> collection while you’re iterating it. It would just feel wrong to change 
> a collection while you iterate it, we don’t need to try to support that 
> because who would do that?
> 
> 
> On Thu, 3 Nov 2022 at 03:12 Hernán Wilkinson 
> <hernan.wilkinson at 10pines.com <mailto:hernan.wilkinson at 10pines.com>> wrote:
> 
>     How does that optimization work?
>     Because I thought about evaluating the block and multiplying that
>     for the number of elements, but that makes sense if the block
>     returns always the same value por the same element, if it does not
>     then it will not work...
> 
> 
>     On Wed, Nov 2, 2022 at 3:24 PM Juan Vuletich <juan at cuis.st
>     <mailto:juan at cuis.st>> wrote:
> 
>         __
>         On 11/1/2022 11:23 PM, Hernán Wilkinson via Cuis-dev wrote:
>>         yeap, the current implementation is not correct.
>>         Juan, attached is a change set that fixes it and another with
>>         the related tests.
>>
>>         Cheers!
>>         Hernan.
>>
>>         On Tue, Nov 1, 2022 at 3:39 AM Luciano Notarfrancesco
>>         <luchiano at gmail.com <mailto:luchiano at gmail.com>> wrote:
>>
>>             I’m afk right now so I cannot check, but it sounds like I
>>             made a mistake. Of course it should be the value of aBlock
>>             at each element times the number of occurrences.
>>
>>             On Tue, 1 Nov 2022 at 07:33 Hernán Wilkinson
>>             <hernan.wilkinson at 10pines.com
>>             <mailto:hernan.wilkinson at 10pines.com>> wrote:
>>
>>                 Hi,
>>                  the implementation of Bag>>#sum: aBlock ifEmpty:
>>                 emptyBlock does not use the parameter aBlock at all
>>                 and assumes that each of the elements answers the
>>                 message *
>>                 @Luciano Notarfrancesco
>>                 <mailto:luchiano at gmail.com> the implementation is
>>                 yours and it is very new? Is there a reason you did
>>                 that way?
>>
>>                 Thanks
>>                 Hernan
>>
>>
>>                 -- 
>>                 *Hernán Wilkinson
>>                 Agile Software Development, Teaching & Coaching*
>>                 *Phone: +54-011*-4893-2057
>>                 *Twitter: @HernanWilkinson*
>>                 *site: http://www.10Pines.com <http://www.10pines.com/>*
>>                 Address: Alem 896, Floor 6, Buenos Aires, Argentina
>>
>>
>>
>>         -- 
>>         *Hernán Wilkinson
>>         Agile Software Development, Teaching & Coaching*
>>         *Phone: +54-011*-4893-2057
>>         *Twitter: @HernanWilkinson*
>>         *site: http://www.10Pines.com <http://www.10pines.com/>*
>>         Address: Alem 896, Floor 6, Buenos Aires, Argentina
> 
>         Hi Hernán,
> 
>         Your fix disables the optimization Luciano did. I chose to fix
>         Luciano's code. Did the same for #product: (same bug).
>         Integrated your tests, and added another one for #product:
> 
>         Thanks,
> 
>         -- 
>         Juan Vuletich
>         cuis.st  <http://cuis.st>
>         github.com/jvuletich  <http://github.com/jvuletich>
>         researchgate.net/profile/Juan-Vuletich  <http://researchgate.net/profile/Juan-Vuletich>
>         independent.academia.edu/JuanVuletich  <http://independent.academia.edu/JuanVuletich>
>         patents.justia.com/inventor/juan-manuel-vuletich  <http://patents.justia.com/inventor/juan-manuel-vuletich>
>         linkedin.com/in/juan-vuletich-75611b3  <http://linkedin.com/in/juan-vuletich-75611b3>
>         twitter.com/JuanVuletich  <http://twitter.com/JuanVuletich>
> 
> 
> 
>     -- 
>     *Hernán Wilkinson
>     Agile Software Development, Teaching & Coaching*
>     *Phone: +54-011*-4893-2057
>     *Twitter: @HernanWilkinson*
>     *site: http://www.10Pines.com <http://www.10pines.com/>*
>     Address: Alem 896, Floor 6, Buenos Aires, Argentina
> 
> 


More information about the Cuis-dev mailing list