Erreur en caml ou quoi

Fermé
h-ghanmi - 17 juin 2009 à 15:47
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 20 juin 2009 à 13:14
Bonjour, j'ai un probleme en cette fonction ci dessous:
j'ai mis
if( ) then
begin
inst1;
inst2;
if ( ) then
begin
inst;
inst;
end
else
inst3;
end;;

c'est a dire est ce qu'on peut mettre des sous begib comme ci dessus

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
20 juin 2009 à 13:14
Ton code serait correct, cependant il y a quelques contraintes...

Dans tes instructions if () à l'intérieur des parenthèses ça doit être une valeur booléenne
Remarque, les parenthèses sont facultatives.

Le gros piège c'est que le if renvoie toujours un résultat qui doit donc avoir un type.
On devra donc avoir le même type à la fin du then et à la fin du else (le type unit, si il n'y a pas de else)
Ce type commun sera le type du if

Je simplifie ton code :
if condition1 then begin
                   instruction2;
                   if condition3 then instruction4
                                 else instruction5;
                   end;;
Ici condition1 et condition3 sont des booléens (ils valent true ou false)
instuction4 et instruction5 doivent être de même type
Or comme le if condition1 n'a pas de else, il est de type unit, donc le then doit aussi être unit
Or la dernière instruction du then c'est le if condition3, donc instruction4 et instruction5 devront être unit

Voici un exemple correct :
let abs x = if x<0. then -.x else x;;
x est un réél, le then et le else renvoie des rééls, donc le résultat du if sera réél
C'est pour ça que absX renvoie un réél, en l'occurrence la valeur absolue du réél x
0