[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