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

Luciano Notarfrancesco luchiano at gmail.com
Wed Nov 2 22:34:12 PDT 2022


Yes. Actually it assumes slightly less, it assumes the values of the block
can be added (and thus multiplied by a natural number n, which means adding
it to itself n times and it is always possible and should be implemented as
#*). The main use of #sum: is with blocks that evaluate to Numbers, but it
works for more general objects.

On Thu, 3 Nov 2022 at 12:25 Andres Valloud via Cuis-dev <
cuis-dev at lists.cuis.st> wrote:

> 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
> >
> >
> --
> Cuis-dev mailing list
> Cuis-dev at lists.cuis.st
> https://lists.cuis.st/mailman/listinfo/cuis-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20221103/44bcbae3/attachment.htm>


More information about the Cuis-dev mailing list