Next: Filtrage
Up: Quelques éléments de Caml
Previous: Correction des programmes
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
1/11/1998