“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 88 — #98
i
i
i
i
i
i
i
i
88
2
• La programmation déclarative
statement : :=
fun ’{’ variable { pattern } ’}’ inExpression end
| . . .
expression : :=
fun ’{’ ’$’ { pattern } ’}’ inExpression end
| proc ’{’ ’$’ { pattern } ’}’ inStatement end
| ’{’ expression { expression } ’}’
| local { declPart }+ in expression end
| if expression then inExpression
{ elseif expression then inExpression }
[ else inExpression ] end
| case expression
of pattern [ andthen expression ] then inExpression
{ ’[]’ pattern [ andthen expression ] then inExpression }
[ else inExpression ] end
| . . .
inStatement : :=
[ { declPart }+ in ] statement
inExpression : :=
[ { declPart }+ in ] [ statement ] expression
Tableau 2.7 La syntaxe des fonctions.
L’appel de fonction dans une structure de données
Il y a une règle supplémentaire pour les appels de fonction. Il s’agit d’un appel dans
une structure de données (enregistrement, tuple ou liste). Voici un exemple :
Ys={F X}|{Map Xr F}
Dans ce cas, la traduction met les appels imbriqués après l’opération de lien :
local Y Yr in
Ys=Y|Yr
{F X Y}
{Map Xr F Yr}
end
Cela permet souvent à l’appel récursif d’être le dernier appel. La section 2.5.1 explique
pourquoi c’est important pour l’efficacité de l’exécution. La fonction Map complète
est définie comme ceci :
Précédent

- 103/370

Suivant