“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 205 — #215
i
i
i
i
i
i
i
i
4.3 Les flots
205
L’utilisation d’un itérateur d’ordre supérieur
L’appel récursif de Sum a un argument A qui est la somme de tous les éléments vus
à un moment donné. Cet argument et le résultat de la fonction pris ensemble font un
accumulateur, comme nous avons vu dans la section 3.4.3. Nous pouvons éliminer
l’accumulateur en utilisant une abstraction de boucle :
local Xs S in
thread Xs={Generate 0 150000} end
thread S={FoldL Xs fun {$ X Y} X+Y end 0} end
{Browse S}
end
La fonction FoldL fait une itération et accumule le résultat. À cause des variables
dataflow, FoldL fonctionne bien dans un contexte concurrent sans nécessiter aucun
changement. L’élimination d’un accumulateur en utilisant un itérateur d’ordre supérieur est une technique générale. L’accumulateur n’est pas vraiment éliminé, mais
caché dans l’itérateur. Mais le programme est plus simple parce que le programmeur
ne doit plus raisonner avec un état. Le module List a encore d’autres abstractions
de boucle et opérations d’ordre supérieur qui peuvent souvent remplacer les fonctions
récursives [23].
Plusieurs lecteurs
Nous pouvons utiliser plusieurs consommateurs sans changer le programme. Par
exemple, voici trois consommateurs qui lisent le même flot :
local Xs S1 S2 S3 in
thread Xs={Generate 0 150000} end
thread S1={Sum Xs 0} end
thread S2={Sum Xs 0} end
thread S3={Sum Xs 0} end
end
Le fil de chaque consommateur recevra les éléments du flot indépendamment
des autres. Les consommateurs ne se gênent pas mutuellement parce qu’ils ne
« consomment » pas vraiment le flot ; ils le lisent sans le perturber.
4.3.2 Les transformateurs et les pipelines
Nous pouvons intercaler un troisième objet à flots entre le producteur et le consommateur. Il lit le flot du producteur et crée un autre flot qui est lu par le consommateur.
Nous l’appelons un transformateur. En général, une séquence d’objets à flots dont
chacun alimente le suivant s’appelle un pipeline. Regardons quelques pipelines avec
différentes sortes de transformateurs.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 220/370

Suivant