“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 24 — #34
i
i
i
i
i
i
i
i
24
1
• Introduction aux concepts de programmation
Le deuxième utilise une cellule :
local X in
X={NewCell 23}
X:=44
{Browse @X}
end
Dans le premier fragment, l’identificateur X fait référence à deux variables différentes. Dans le deuxième, X fait référence à une cellule. Qu’est-ce qui est affiché
par le Browse dans chaque fragment ? Expliquez votre réponse.
➤ Exercice 7 — L’état explicite et les fonctions
Cet exercice explore l’utilisation des cellules dans les fonctions. Nous définissons
une fonction {Accumulate N} qui accumule toutes ses entrées, c’est-à-dire
qu’elle additionne les arguments de tous ses appels. Voici un exemple :
{Browse {Accumulate 5}}
{Browse {Accumulate 100}}
{Browse {Accumulate 45}}
Ces appels afficheront 5, 105 et 150, en supposant que l’accumulateur contient
zéro au début. Voici une manière erronée d’écrire Accumulate :
declare
fun {Accumulate N}
Acc in
Acc={NewCell 0}
Acc:=@Acc+N
@Acc
end
Quelle est l’erreur dans cette définition ? Comment la corrigeriez-vous ?
➤ Exercice 8 — L’état explicite et la concurrence
La section 1.14 donne un exemple d’une cellule qui est incrémentée par deux
fils.
a) Exécutez cet exemple plusieurs fois. Quels sont vos résultats ? Obtenez-vous
parfois le résultat 1 ? Pourquoi oui ou pourquoi non ?
b) Modifiez l’exemple en ajoutant des appels à Delay dans chaque fil. Cela
change l’entrelacement des fils sans changer les calculs faits par les fils.
Pouvez-vous trouver un jeu de délais qui donne toujours le résultat 1 ?
i
i
i
i
i
i
i
i
24
1
• Introduction aux concepts de programmation
Le deuxième utilise une cellule :
local X in
X={NewCell 23}
X:=44
{Browse @X}
end
Dans le premier fragment, l’identificateur X fait référence à deux variables différentes. Dans le deuxième, X fait référence à une cellule. Qu’est-ce qui est affiché
par le Browse dans chaque fragment ? Expliquez votre réponse.
➤ Exercice 7 — L’état explicite et les fonctions
Cet exercice explore l’utilisation des cellules dans les fonctions. Nous définissons
une fonction {Accumulate N} qui accumule toutes ses entrées, c’est-à-dire
qu’elle additionne les arguments de tous ses appels. Voici un exemple :
{Browse {Accumulate 5}}
{Browse {Accumulate 100}}
{Browse {Accumulate 45}}
Ces appels afficheront 5, 105 et 150, en supposant que l’accumulateur contient
zéro au début. Voici une manière erronée d’écrire Accumulate :
declare
fun {Accumulate N}
Acc in
Acc={NewCell 0}
Acc:=@Acc+N
@Acc
end
Quelle est l’erreur dans cette définition ? Comment la corrigeriez-vous ?
➤ Exercice 8 — L’état explicite et la concurrence
La section 1.14 donne un exemple d’une cellule qui est incrémentée par deux
fils.
a) Exécutez cet exemple plusieurs fois. Quels sont vos résultats ? Obtenez-vous
parfois le résultat 1 ? Pourquoi oui ou pourquoi non ?
b) Modifiez l’exemple en ajoutant des appels à Delay dans chaque fil. Cela
change l’entrelacement des fils sans changer les calculs faits par les fils.
Pouvez-vous trouver un jeu de délais qui donne toujours le résultat 1 ?
