“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 87 — #97
i
i
i
i
i
i
i
i
2.6 Du langage noyau au langage pratique
87
L’argument supplémentaire R est lié à l’expression dans le corps de la procédure. Si le
corps de la fonction est une instruction if, alors chaque alternative de l’instruction
devra terminer par une expression :
fun {Max X Y}
if X>=Y then X else Y end
end
Cela est traduit en :
proc {Max X Y ?R}
R = if X>=Y then X else Y end
end
Nous pouvons continuer la traduction en transformant le if d’une expression en une
instruction. Cela donne le résultat final :
proc {Max X Y ?R}
if X>=Y then R=X else R=Y end
end
Des règles similaires s’appliquent pour les instructions local et case, et pour les
autres instructions que nous verrons plus loin. Chaque instruction peut être utilisée
comme une expression. Quand une composition séquentielle dans une procédure se
termine par une instruction, la séquence correspondante dans une fonction se termine
par une expression. Le tableau 2.7 donne la syntaxe complète des expressions en
appliquant cette règle. Ce tableau montre toutes les instructions que nous avons vues
jusqu’à maintenant avec leur syntaxe en tant qu’expression. En particulier, il y a
également les valeurs fonctionnelles, qui sont simplement des valeurs procédurales
écrites en syntaxe fonctionnelle.
L’appel de fonction
Un appel de fonction {F X1 ... XN} est traduit en un appel de procédure {F X1
... XN R}, où R remplace l’appel de F à son emplacement. Par exemple, l’appel
imbriqué de F suivant :
{Q {F X1 ... XN} ...}
est traduit en :
local R in
{F X1 ... XN R}
{Q R ...}
end
En général, les appels de fonction imbriqués sont évalués avant l’appel de la fonction
dans laquelle ils sont imbriqués. S’il y en a plusieurs, ils sont évalués dans l’ordre de
leur apparition dans le programme.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 102/370

Suivant