I like the pharophile :)

On Mon, Jan 22, 2018 at 10:57 AM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> yes, we need composition to avoid API explosion (things are already very bad 
> in this respect)
>
>> On 22 Jan 2018, at 10:38, Guillermo Polito <guillermopol...@gmail.com> wrote:
>>
>> In most collection libraries I know there is the "take" function coming from 
>> the functional world that does that:
>>
>> #(1 2 3 4 5 6 7 8) take: 5
>>   => #(1 2 3 4 5)
>>
>> #(1 2 3 4) take: 5
>>   => #(1 2 3 4)
>>
>> Now, I understand there are two different things in here.
>>  - First is the fact that we would like to apply this iterator to more than 
>> sequenceable collections. I think that the name "take" is order agnostic in 
>> that sense.
>>  - The other thing is that people would like to not calculate the 
>> sub-collection... The problem is that we will end up with ugly combinations 
>> of selectors like
>>
>> take:thenDo:
>> take:thenCollect:
>> take:thenSelect:
>> ...
>>
>> And that pattern already exists also for:
>>
>> select:thenCollect:
>> select:thenDo:
>>
>> collect:as:
>> select:as:
>>
>> ...
>>
>> I think I would like to have a more composable kind of 
>> iterators/collections. There are Transducers that make "iterators" kind of 
>> command objects that you can apply on a collection. Personally I don't like 
>> the API choice but the idea behind is nice:
>>
>> https://github.com/Pharophile/Transducers
>>
>> sum := #+ init: 0.
>> sum1 := #(1 1 1) reduce: sum.
>> sum2 := (1 to: 1000) transduce: #odd filter reduce: sum.
>>
>>
>> And there are XTreams that allows one to work on a collection as a stream 
>> and then compose decorators on top. This means however that we need to 
>> create a stream and "close" it to obtain the resulting collection on every 
>> manipulation.
>>
>> https://github.com/mkobetic/Xtreams
>> https://code.google.com/archive/p/xtreams/wikis/Core.wiki
>>
>> ((aCollection reading collect: [ ... ]) select: [ ... ]) rest.
>>
>> Guille
>>
>> On Mon, Jan 22, 2018 at 4:11 AM, Ben Coman <b...@openinworld.com> wrote:
>> On 22 January 2018 at 00:47, Stephane Ducasse <stepharo.s...@gmail.com> 
>> wrote:
>> > Hi Ben and Clement
>> >
>> > I have a collection (a dictionary in my case) and I want to get
>> > maximum 5 bindings out of it and iterate on them.
>> > I want keysAndValuesDo: or do: but only up to 5 elements.
>> >
>> > aDict atMax: 5 do: [:each | ]
>>
>> "atMax" sound a bit like comparison rather than counting. Perhaps
>> better would be...
>>     aDict atMost: 5 do: [:each | ]   "or"
>>     aDict for: 5 do: [:each | ]
>>
>> but rather than introduce three or more messages...
>>     aDict atMost: 5 do: [:each| ... ]
>>     aDict atMost: 5 select: [:each| ... ]
>>     aDict atMost: 5 collect: [:each| ... ]
>>
>> why not introduce just one method?....
>>     (aDict any: 5) do: [:each| ... ]
>>     (aDict any: 5) select: [:each| ... ]
>>     (aDict any: 5) collect: [:each| ... ]
>>
>>
>> cheers -ben
>>
>>
>> > So I learned from:to:do:
>> >
>> > aCollection atMax: 5 do: [:each | ]
>> >
>> > Does it make sense?
>> >
>> > Stef
>> >
>> > On Sun, Jan 21, 2018 at 1:16 PM, Clément Bera <bera.clem...@gmail.com> 
>> > wrote:
>> >> I don't think we do. Do you need it on SequenceableCollection or
>> >> HashedCollection too ?
>> >>
>> >> Recently I was trying to iterate over the first N elements of a collection
>> >> and since there was no #first:do: I used #from:to:do:. I guess you could 
>> >> use
>> >> that too:
>> >>
>> >> aCollection from: 1 to: (aCollection size min: 1000) do: aBlock
>> >>
>> >> Which guarantees you iterate at max over 1000 elements. But that API is
>> >> SequenceableCollection specific.
>> >>
>> >> On Sun, Jan 21, 2018 at 11:44 AM, Ben Coman <b...@openinworld.com> wrote:
>> >>>
>> >>> On 21 January 2018 at 18:36, Stephane Ducasse <stepharo.s...@gmail.com>
>> >>> wrote:
>> >>> > Hi
>> >>> >
>> >>> > I would like to iterate at max on a certain amount of elements in a
>> >>> > collection.
>> >>> > And I was wondering if we have such iterator.
>> >>>
>> >>> I'm not clear what functionality your asking for.  Could you present
>> >>> it as code & result if you assumed the iterator you want was
>> >>> available?
>> >>>
>> >>> cheers -ben
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> Clément Béra
>> >> Pharo consortium engineer
>> >> https://clementbera.wordpress.com/
>> >> Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
>> >
>>
>>
>>
>>
>> --
>>
>> Guille Polito
>> Research Engineer
>>
>> Centre de Recherche en Informatique, Signal et Automatique de Lille
>> CRIStAL - UMR 9189
>> French National Center for Scientific Research - http://www.cnrs.fr
>>
>> Web: http://guillep.github.io
>> Phone: +33 06 52 70 66 13
>
>

Reply via email to