“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 263 — #273
i
i
i
i
i
i
i
i
5.7 Exercices
263
5.7 EXERCICES
➤ Exercice 1 — L’importance des séquences
La section 5.1 donne une définition de l’état. Pour cet exercice, comparez
et contrastez cette définition avec la définition suivante de la bande dessinée
(« comics » en anglais) donnée par Scott McCloud [64] :
com·ics (kom’iks) n. 1. Dessins picturaux et autres, juxtaposés en
séquence délibérée, avec l’intention de transmettre des informations
et/ou de produire une réaction esthétique chez le spectateur. . . .
Indices : Sommes-nous intéressés par toute la séquence ou uniquement par le
résultat final ? La séquence existe-t-elle en temps ou en espace ? La transition
entre les éléments de la séquence est-elle importante ?
➤ Exercice 2 — L’état avec des cellules
La section 5.1 définit la fonction SumList, qui a un état codé comme les valeurs
successives de deux arguments aux appels récursifs. Pour cet exercice, réécrivez
SumList pour que l’état ne soit plus codé dans les arguments mais dans des
cellules.
➤ Exercice 3 — L’émulation de l’état avec la concurrence
Cet exercice explore si la concurrence peut être utilisée pour obtenir l’état explicite.
a) D’abord utilisez la concurrence pour créer un conteneur affectable. Nous
créons un fil qui utilise une procédure récursive pour lire un flot. Le flot
contient deux commandes possibles : access(X), qui lie X au contenu
actuel du conteneur, et assign(X), qui met X comme nouveau contenu.
Voici la définition :
fun {MakeState Init}
proc {Loop S V}
case S of access(X)|S2 then
X=V {Loop S2 V}
[] assign(X)|S2 then
{Loop S2 X}
else skip end
end S
in
thread {Loop S Init} end S
end
L’appel S={MakeState 0} crée un nouveau conteneur avec un contenu
initial 0. Nous utilisons le conteneur avec les commandes dans le flot. Par
exemple, voici une séquence de trois commandes pour le conteneur S :
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
5.7 Exercices
263
5.7 EXERCICES
➤ Exercice 1 — L’importance des séquences
La section 5.1 donne une définition de l’état. Pour cet exercice, comparez
et contrastez cette définition avec la définition suivante de la bande dessinée
(« comics » en anglais) donnée par Scott McCloud [64] :
com·ics (kom’iks) n. 1. Dessins picturaux et autres, juxtaposés en
séquence délibérée, avec l’intention de transmettre des informations
et/ou de produire une réaction esthétique chez le spectateur. . . .
Indices : Sommes-nous intéressés par toute la séquence ou uniquement par le
résultat final ? La séquence existe-t-elle en temps ou en espace ? La transition
entre les éléments de la séquence est-elle importante ?
➤ Exercice 2 — L’état avec des cellules
La section 5.1 définit la fonction SumList, qui a un état codé comme les valeurs
successives de deux arguments aux appels récursifs. Pour cet exercice, réécrivez
SumList pour que l’état ne soit plus codé dans les arguments mais dans des
cellules.
➤ Exercice 3 — L’émulation de l’état avec la concurrence
Cet exercice explore si la concurrence peut être utilisée pour obtenir l’état explicite.
a) D’abord utilisez la concurrence pour créer un conteneur affectable. Nous
créons un fil qui utilise une procédure récursive pour lire un flot. Le flot
contient deux commandes possibles : access(X), qui lie X au contenu
actuel du conteneur, et assign(X), qui met X comme nouveau contenu.
Voici la définition :
fun {MakeState Init}
proc {Loop S V}
case S of access(X)|S2 then
X=V {Loop S2 V}
[] assign(X)|S2 then
{Loop S2 X}
else skip end
end S
in
thread {Loop S Init} end S
end
L’appel S={MakeState 0} crée un nouveau conteneur avec un contenu
initial 0. Nous utilisons le conteneur avec les commandes dans le flot. Par
exemple, voici une séquence de trois commandes pour le conteneur S :
© Dunod – La photocopie non autorisée est un délit
