OCaml - Error: This '(' might be unmatched

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’essaie de programmer en OCaml mais je ne comprends pas ou est l’erreur. Le compilateur me dit qu’il me manque une parenthèse mais je n’arrive pas à voir ou :'(

Voilà mon code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let rec dec_to_bin a b c =
  match a with
  | 0 -> b
  | _ -> if a mod 2 = 0 then dec_to_bin (a/2)(b)(c+1) else begin  b.(c) <- 1; dec_to_bin ((a-1)/2)(b)(c+1) end;;

let n = read_int();;
let p = read_int ();;
let ar_of_int = Array.make n 0;;


for i = 0 to n - 1 do
   ar_of_int.(i) <- read_int()
done;;

let c = ref 1;;

for i = 0 to n do
  c := !c*2
done;;

for i = 1 to !c do
  let mask = dec_to_bin (i)(Array.make n 0)(0) in
  let champ = ref 0 in
  for j = 0 to n-1 do
    champ := !champ + ar_of_int.(j)*mask.(j)
      if !champ = p then
    print_int (1)
      end 
  done
done;;

Voilà le message d’erreur que j’ai : line 26, characters 6-8: Error: Syntax error: ')' expected , line 25, characters 41-42: Error: This '(' might be unmatched

Merci d’avance !

Salut,

À la fin de ton code, tu as une boucle for, qui contient deux erreurs.

Déjà, tu as un end sans begin, ce qui n’est pas normal.

Ensuite, tu dois mettre un point-virgule entre les deux instructions de la boucle (l’assignation de la référence et le if).

1
2
3
4
5
6
7
8
9
for i = 1 to !c do
  let mask = dec_to_bin (i)(Array.make n 0)(0) in
  let champ = ref 0 in
  for j = 0 to n-1 do
    champ := !champ + ar_of_int.(j)*mask.(j);
      if !champ = p then
    print_int (1)
  done
done;;

Par contre, avec cette modification, tu as quand même une erreur à l’exécution.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte