Another important difference is that no intermediate collections are built. In contrast, chaining x enumeration statements #select:, #collect:, etc. iterates x times over the collection elements and builds x-1 intermediate collections.

Am .10.2018, 11:59 Uhr, schrieb Steffen Märcker <merk...@web.de>:

Hi,

indeed, transducers provided a way to achieve this, e.g.

#(12 7 'a' nil #(0)) pipe
        filter: #notNil;
        filter: #isNumber;
        map: #squared;
        filter: #even;
        into: OrderedCollection.

But this feature is deprecated, as it was not that useful. The preferred way to do this is either:

#(12 7 'a' nil #(0))
transduce: #notNil filter * #isNumber filter * squared map * #even filter
        reduce: Set accumulate.

or:

Set <~ #even filter
     <~ #squared map
     <~ #isNumber filter
     <~ #notNil filter
     <~ #(12 7 'a' nil #(0)).

The advantage of the transducer approach is that it decouples filtering/mapping/etc. from iteration and aggregation. This facilitates reuse and makes it trivial to provide all operations to new custom data types.

However, I didn't have time to finish the Pharo port of Transducers, yet. Hence, the a current version is available in Cincom's Public Store or (most current) directly from me only. But if you are interested and have a nice use case, I'd be happy to help out.

Best, Steffen


Am .10.2018, 08:45 Uhr, schrieb Julien <julien.delplan...@inria.fr>:

I think this was the idea of Transducers as well.

Julien

---
Julien Delplanque
Doctorant à l’Université de Lille
http://juliendelplanque.be/phd.html
Equipe Rmod, Inria
Bâtiment B 40, Avenue Halley 59650 Villeneuve d'Ascq
Numéro de téléphone: +333 59 35 86 40

<---Schnitt--->




Reply via email to