“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 41 — #51
i
i
i
i
i
i
i
i
2.2 La mémoire à affectation unique
41
elle était la valeur. L’opération x + y est la même que 11 + 22 si la mémoire contient
{x = 11, y = 22}.
2.2.2 La mémoire à valeurs
Une mémoire où toutes les variables sont liées aux valeurs s’appelle une mémoire
à valeurs. Cette mémoire est une correspondance immuable des variables aux
valeurs. Une valeur est une constante mathématique. Par exemple, l’entier 314 est
une valeur. Des valeurs peuvent aussi être des entités composées, à savoir des entités
qui contiennent une ou plusieurs autres valeurs. Par exemple, la liste [1 2 3]
et l’enregistrement person(name:"George" age:25) sont des valeurs. La
figure 2.8 montre une mémoire à valeurs où x 1 est liée à l’entier 314, x 2 est liée
à la liste [1 2 3] et x 3 est liée à l’enregistrement person(name:"George"
age:25). Les langages fonctionnels tels que Standard ML, Haskell et Scheme
utilisent une mémoire à valeurs. (Les langages orientés objet tels que Smalltalk, C++
et Java utilisent une mémoire à cellules, qui est un ensemble de cellules dont le
contenu peut être modifié.)
3
"George"
25
314
nil
1
2
3
person
name
age
x
x
x
1
2
Figure 2.8 Une mémoire à valeurs : toutes les variables sont liées aux valeurs.
À ce point, le lecteur qui a déjà programmé se demandera peut-être pourquoi nous
introduisons une mémoire à affectation unique, quand d’autres langages s’en tiennent
à une mémoire à valeurs ou à une mémoire à cellules. Il y a beaucoup de raisons.
Une première raison est que nous voulons calculer avec des valeurs partielles. Par
exemple, une procédure peut renvoyer son résultat en liant une variable non liée donnée
comme argument. Une deuxième raison est la concurrence dataflow, qui est traitée
au chapitre 4. Elle devient possible à cause de la mémoire à affectation unique. Une
troisième raison est que nous avons besoin d’une mémoire à affectation unique à cause
de la programmation relationnelle (programmation logique) et de la programmation
par contraintes. Ces deux modèles sont expliqués dans les chapitres 9 et 12 de [97].
Il y a encore d’autres raisons ; par exemple, la mémoire à affectation unique permet
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
2.2 La mémoire à affectation unique
41
elle était la valeur. L’opération x + y est la même que 11 + 22 si la mémoire contient
{x = 11, y = 22}.
2.2.2 La mémoire à valeurs
Une mémoire où toutes les variables sont liées aux valeurs s’appelle une mémoire
à valeurs. Cette mémoire est une correspondance immuable des variables aux
valeurs. Une valeur est une constante mathématique. Par exemple, l’entier 314 est
une valeur. Des valeurs peuvent aussi être des entités composées, à savoir des entités
qui contiennent une ou plusieurs autres valeurs. Par exemple, la liste [1 2 3]
et l’enregistrement person(name:"George" age:25) sont des valeurs. La
figure 2.8 montre une mémoire à valeurs où x 1 est liée à l’entier 314, x 2 est liée
à la liste [1 2 3] et x 3 est liée à l’enregistrement person(name:"George"
age:25). Les langages fonctionnels tels que Standard ML, Haskell et Scheme
utilisent une mémoire à valeurs. (Les langages orientés objet tels que Smalltalk, C++
et Java utilisent une mémoire à cellules, qui est un ensemble de cellules dont le
contenu peut être modifié.)
3
"George"
25
314
nil
1
2
3
person
name
age
x
x
x
1
2
Figure 2.8 Une mémoire à valeurs : toutes les variables sont liées aux valeurs.
À ce point, le lecteur qui a déjà programmé se demandera peut-être pourquoi nous
introduisons une mémoire à affectation unique, quand d’autres langages s’en tiennent
à une mémoire à valeurs ou à une mémoire à cellules. Il y a beaucoup de raisons.
Une première raison est que nous voulons calculer avec des valeurs partielles. Par
exemple, une procédure peut renvoyer son résultat en liant une variable non liée donnée
comme argument. Une deuxième raison est la concurrence dataflow, qui est traitée
au chapitre 4. Elle devient possible à cause de la mémoire à affectation unique. Une
troisième raison est que nous avons besoin d’une mémoire à affectation unique à cause
de la programmation relationnelle (programmation logique) et de la programmation
par contraintes. Ces deux modèles sont expliqués dans les chapitres 9 et 12 de [97].
Il y a encore d’autres raisons ; par exemple, la mémoire à affectation unique permet
© Dunod – La photocopie non autorisée est un délit
