next up previous contents index
Next: Filtrage Up: Quelques éléments de Caml Previous: Correction des programmes

Instructions

      Caml n'a pas à proprement parler la notion d'instructions, puisqu'en dehors des définitions, toutes les constructions syntaxiques sont des expressions qui donnent lieu à une évaluation et produisent un résultat. Parmi ces expressions, la séquence joue un rôle particulier: elle permet d'évaluer successivement les expressions. Une séquence est formée de deux expressions séparées par un ;, par exemple e1 ; e2. La valeur d'une séquence est celle de son dernier élément, les résultats intermédiaires sont ignorés. Dans e1 ; e2, on évalue e1, on oublie le résultat obtenu, puis on évalue e2 qui donne le résultat final de la séquence. Comme en Pascal, on peut entourer une séquence des mots-clé begin et end.

begin {\em $e_1$}; {\em $e_2$}; ...; {\em $e_n$} end

Dans une séquence, on admet les alternatives sans partie else:

if {\em $e$} then {\em $e_1$}

qui permet d'évaluer e1 seulement quand e est vraie, alors que l'alternative complète

if {\em $e$} then {\em $e_1$} else {\em $e_2$}

évalue e2 quand e est faux. En réalité, la conditionnelle partielle est automatiquement complétée en une alternative complète avec else (). Cela explique pourquoi le système rapporte des erreurs concernant le type unit, en cas de conditionnelle partielle dont l'unique branche n'est pas de type unit:

#if true then 1;;
Entrée interactive:
>if true then 1;;
>             ^
Cette expression est de type int,
mais est utilisée avec le type unit.
#if true then printf "Hello world!\n";;
Hello world!
- : unit = ()

On lève les ambiguités dans les cascades de conditionnelles en utilisant begin et end. Ainsi

if {\em $e$} then if {\em $e '$} then {\em $e_1$} else {\em $e_2$}

équivaut à

if {\em $e$} then begin if {\em $e '$} then {\em $e_1$} else {\em $e_2$} end


next up previous contents index
Next: Filtrage Up: Quelques éléments de Caml Previous: Correction des programmes

1/11/1998