“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 66 — #76
i
i
i
i
i
i
i
i
66
2
• La programmation déclarative
L’instruction s peut contenir des identificateurs libres. Il y a deux possibilités pour
chaque identificateur libre : il est un argument formel ou il ne l’est pas. Les premiers
sont définis à nouveau chaque fois que la procédure est appelée. Ils font partie des
paramètres formels {y 1 , . . . , y n }. Les autres sont définis une fois pour toutes quand
la procédure est déclarée. Nous les appelons les références externes de la procédure.
Nous les écrivons {z 1 , . . . , z k }. La valeur procédurale est donc une paire :
( proc { $ y 1 · · · ·y n } s end, C E )
Cette paire est stockée en mémoire comme toute autre valeur. Ici l’environnement
contextuel C E = E| {{z 1 ,...,z n } , où E est l’environnement quand la procédure est
déclarée.
Comme elle contient un environnement et une définition de procédure, une valeur
procédurale est souvent appelée une fermeture ou une fermeture à portée lexicale, car
elle « ferme » (emballe) l’environnement qui existe au moment de la définition de la
procédure. Cette opération est aussi appelée une capture d’environnement. Quand la
procédure est appelée, l’environnement contextuel est utilisé pour construire l’environnement du corps de la procédure qui s’exécute.
2.4.4 Les instructions à suspension
Trois instructions du langage noyau restent à définir :
s : := . . .
| if x then s 1 else s 2 end
| case x of pattern then s 1 else s 2 end
| ´{´ x y 1 · · · ·y n ´}´
Que font ces instructions quand x est non liée ? D’après la section 2.2.8, nous savons
ce qui doit arriver. Les instructions doivent simplement attendre jusqu’à ce que x soit
liée. Nous disons qu’elles sont des instructions à suspension. Elles ont une condition
d’activation que nous définissons comme une condition qui doit être vraie pour que
l’exécution continue. La condition est que E(x) doit être déterminée, c’est-à-dire
liée à un nombre, un enregistrement ou une procédure.
Dans le modèle déclaratif de ce chapitre, une fois qu’une instruction suspend elle
ne continue jamais. Le programme arrête simplement son exécution car il n’y a pas
d’autre exécution qui pourrait rendre vraie la condition d’activation. Dans le chapitre 4,
où nous introduirons la programmation concurrente, nous aurons des exécutions à
plusieurs piles sémantiques. Une pile suspendue ST pourra devenir exécutable de nouveau si une autre pile fait une opération qui rend vraie la condition d’activation de ST.
C’est la base de l’exécution dataflow. Pour l’instant, nous explorons la programmation
séquentielle, qui ne contient qu’une seule pile sémantique.
Précédent

- 81/370

Suivant