Comme cela a été récemment mentionné ici plusieurs fois, OCaml n'a aucune déclaration. Il a seulement des expressions. Pour qu'une expression if
ait du sens, les parties then
et else
doivent être du même type. Dans votre code, la partie then
est 1
. C'est-à-dire qu'il a le type int
. Dans la partie else
, vous avez une expression for
. Le type d'une expression for
est unit
. C'est ce que le compilateur se plaint. Toutefois, la résolution de ce problème ne sera que la première étape car votre code est basé sur une mauvaise compréhension du fonctionnement des variables OCaml. Les variables OCaml telles que soma
sont immutable. Vous ne pouvez pas changer leur valeur. Ainsi, l'expression soma = soma + 1
est en fait une comparaison qui indique si les deux valeurs sont égales:
# let soma = 0;;
val soma : int = 0
# soma = soma + 1;;
- : bool = false
D'une manière générale, vous devez trouver un moyen de résoudre votre problème sans attribuer aux variables; c'est-à-dire sans changer leurs valeurs.
Si vous débutez avec une programmation fonctionnelle, cela semble absurde. Cependant, il s'avère juste être une autre façon de regarder les choses.