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--->