“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 84 — #94
i
i
i
i
i
i
i
i
84
2
• La programmation déclarative
Les instructions if et case imbriquées
Nous ajoutons du sucre syntaxique pour faciliter l’écriture des instructions if et case
avec plusieurs alternatives et des conditions compliquées. Le tableau 2.5 montre la
syntaxe complète de l’instruction if. Le tableau 2.6 montre la syntaxe complète de
l’instruction case et ses formes. (Certains non terminaux dans ces tableaux sont
définis en annexe B.) Ces instructions sont traduites en instructions if et case
primitives du langage noyau. Voici un exemple d’une instruction case complète :
case Xs#Ys of nil#Ys then s 1
[] Xs#nil then s 2
[] (X|Xr)#(Y|Yr) andthen X=
else s 4 end
Elle contient une série d’alternatives séparées avec le symbole « [] ». Les alternatives
sont souvent appelées des clauses. Voici la traduction en syntaxe noyau :
case Xs of nil then s 1 else
case Ys of nil then s 2 else
case Xs of X|Xr then
case Ys of Y|Yr then
if X=
else s 4 end
else s 4 end
end
end
Cette traduction montre une propriété importante de l’instruction case complète :
les clauses sont essayées en séquence en partant de la première clause. L’exécution
continue au-delà d’une clause seulement si la forme de la clause est incompatible avec
l’argument d’entrée.
Les formes imbriquées sont traitées en essayant d’abord la forme à l’extérieur et
ensuite les formes plus à l’intérieur. La forme imbriquée (X|Xr)#(Y|Yr) a une
forme extérieure avec la structure A#B et deux formes intérieures avec la structure A|B.
Les trois formes sont des tuples écrits avec une syntaxe infixée, avec les opérateurs
infixés ´#´ et ´|´. Elles auraient pu être écrites avec la syntaxe habituelle comme
´#´(A B) et ´|´(A B). Chaque forme intérieure (X|Xr) et (Y|Yr) est mise
dans sa propre instruction case de base. La forme extérieure avec ´#´ disparaît de
la traduction parce qu’elle apparaît aussi dans l’entrée du case. Dans cet exemple la
correspondance avec ´#´ peut donc être faite lors de la compilation.
i
i
i
i
i
i
i
i
84
2
• La programmation déclarative
Les instructions if et case imbriquées
Nous ajoutons du sucre syntaxique pour faciliter l’écriture des instructions if et case
avec plusieurs alternatives et des conditions compliquées. Le tableau 2.5 montre la
syntaxe complète de l’instruction if. Le tableau 2.6 montre la syntaxe complète de
l’instruction case et ses formes. (Certains non terminaux dans ces tableaux sont
définis en annexe B.) Ces instructions sont traduites en instructions if et case
primitives du langage noyau. Voici un exemple d’une instruction case complète :
case Xs#Ys of nil#Ys then s 1
[] Xs#nil then s 2
[] (X|Xr)#(Y|Yr) andthen X=
Elle contient une série d’alternatives séparées avec le symbole « [] ». Les alternatives
sont souvent appelées des clauses. Voici la traduction en syntaxe noyau :
case Xs of nil then s 1 else
case Ys of nil then s 2 else
case Xs of X|Xr then
case Ys of Y|Yr then
if X=
else s 4 end
end
end
Cette traduction montre une propriété importante de l’instruction case complète :
les clauses sont essayées en séquence en partant de la première clause. L’exécution
continue au-delà d’une clause seulement si la forme de la clause est incompatible avec
l’argument d’entrée.
Les formes imbriquées sont traitées en essayant d’abord la forme à l’extérieur et
ensuite les formes plus à l’intérieur. La forme imbriquée (X|Xr)#(Y|Yr) a une
forme extérieure avec la structure A#B et deux formes intérieures avec la structure A|B.
Les trois formes sont des tuples écrits avec une syntaxe infixée, avec les opérateurs
infixés ´#´ et ´|´. Elles auraient pu être écrites avec la syntaxe habituelle comme
´#´(A B) et ´|´(A B). Chaque forme intérieure (X|Xr) et (Y|Yr) est mise
dans sa propre instruction case de base. La forme extérieure avec ´#´ disparaît de
la traduction parce qu’elle apparaît aussi dans l’entrée du case. Dans cet exemple la
correspondance avec ´#´ peut donc être faite lors de la compilation.
