“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 217 — #227
i
i
i
i
i
i
i
i
4.5 Exercices
217
quand toutes les valeurs de l’entrée sont disponibles. Explorons le comportement
dataflow de Filter.
a) Que se passe-t-il quand nous exécutons ceci ? :
declare A
{Show {Filter [5 1 A 4 0] fun {$ X} X>2 end}}
Un des éléments de la liste est une variable A qui est non liée. Souvenez-vous
que les instructions case et if suspendent le fil dans lequel elles s’exécutent,
jusqu’à ce qu’elles puissent décider du chemin à prendre.
b) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
{Show Out}
Souvenez-vous que l’appel de Show affiche son argument tel il est à l’instant
de l’appel. Plusieurs résultats possibles peuvent être affichés. Lesquels et pourquoi ? La fonction Filter est-elle déterministe ? Pourquoi oui ou pourquoi
non ?
c) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
{Delay 1000} {Show Out}
Souvenez-vous que l’appel {Delay N} suspend son fil pour au moins N ms.
Pendant ce temps, d’autres fils peuvent s’exécuter.
d) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
thread A=6 end
{Delay 1000} {Show Out}
Qu’est-ce qui est affiché et pourquoi ?
➤ Exercice 7 — La concurrence et les exceptions
Considérez l’abstraction de contrôle suivante qui implémente try–finally :
proc {TryFinally S1 S2}
B Y in
try {S1} B=false catch X then B=true Y=X end
{S2}
if B then raise Y end end
end
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
4.5 Exercices
217
quand toutes les valeurs de l’entrée sont disponibles. Explorons le comportement
dataflow de Filter.
a) Que se passe-t-il quand nous exécutons ceci ? :
declare A
{Show {Filter [5 1 A 4 0] fun {$ X} X>2 end}}
Un des éléments de la liste est une variable A qui est non liée. Souvenez-vous
que les instructions case et if suspendent le fil dans lequel elles s’exécutent,
jusqu’à ce qu’elles puissent décider du chemin à prendre.
b) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
{Show Out}
Souvenez-vous que l’appel de Show affiche son argument tel il est à l’instant
de l’appel. Plusieurs résultats possibles peuvent être affichés. Lesquels et pourquoi ? La fonction Filter est-elle déterministe ? Pourquoi oui ou pourquoi
non ?
c) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
{Delay 1000} {Show Out}
Souvenez-vous que l’appel {Delay N} suspend son fil pour au moins N ms.
Pendant ce temps, d’autres fils peuvent s’exécuter.
d) Que se passe-t-il quand nous exécutons ceci ? :
declare Out A
thread Out={Filter [5 1 A 4 0]
fun {$ X} X>2 end} end
thread A=6 end
{Delay 1000} {Show Out}
Qu’est-ce qui est affiché et pourquoi ?
➤ Exercice 7 — La concurrence et les exceptions
Considérez l’abstraction de contrôle suivante qui implémente try–finally :
proc {TryFinally S1 S2}
B Y in
try {S1} B=false catch X then B=true Y=X end
{S2}
if B then raise Y end end
end
© Dunod – La photocopie non autorisée est un délit
