programation caml

toonette88
programation caml

j'ai un algorithme a faire mais je n'y arrive pas caml me renvoi une erreur
il faut programmer avec un match je suppose
c'est une fonction f telle que 0 -> 0, 2^n -> n et 2^p(2q+1) si q =2^r -> int (r/2)
sinon 2q+1

caml ne veut pas prendre mes puissance et étant une grande débutante je ne sais vraiment pas que faire.

et f x= match x with
0 -> 0
2^n -> n
(2^p)*(2*q+1) match q with
_ q=2^r -> int(r/2)
_ -> 2*q+1
;;

voila le programme proposé

fredericmazue

Bonjour,

Ce n'est pas qu'il ne veut pas prendre les puissances, c'est qu'il ne connait pas n

Déclare ta fonction ainsi:

Quote:
f x n = match x with (* ... etc ... *)

Pour q c'est encore différent. Tu as essayé d'en faire une variable intermédiaire si je comprends bien. La démarche est bonne, mais regarde du côté de l'instruction let. Et aussi remarque que q est définie après son utilisation. Il faut la définir avant. Dans ton énoncé tu as écrit "si". Il se trouve qu'en Caml tu as l'instruction if...then...else qui va t'être bien utile.

Autre chose: tu as deux motifs universels ( _ ) dans ta fonction. Ca fait un de trop.