[CAML] Ordre lexicographique et tableaux

Ordre lexicographique et tableaux [CAML] - Divers - Programmation

Marsh Posté le 04-08-2005 à 14:44:12    

Bonjour, :hello:
 
Je dois programmer une fonction déterminant si un vecteur est égal ou plus grand qu'un autre vecteur suivant l'ordre lexicographique. Pour cela j'ai représenté les vecteurs via des tableaux ; voici le code :
 

Code :
  1. let ordre_lexico t1 t2 =
  2. (*t1 et t2 tableaux*)
  3.   let i=0 and l=Array.length t1 and res=false in
  4.   while i<l && t1.(i)=t2.(i) do
  5.     i=i+1
  6.   done;
  7.   res = (i=l or t1.(i)>t2.(i));;


 
L'interpréteur m'indique à la ligne 5 :  
Warning: this expression should have type unit.
             i=i+1
      ^^^^^
val ordre_lexico : 'a array -> 'a array -> bool = <fun>
 
Quelqu'un peut m'expliquer ce warning ? D'autre part, il m'est impossible de tester la fonction : si j'essaie  
                ordre_lexico [|1;2;3|] [|1;2;3|];;  
il ne se passe rien. Pas de message d'erreur, rien. Je suis obligé de faire un Ctrl-C pour récupérer le prompt. Je pense que cela vient du warning, d'habitude même avec un warning on peut tester...
 
Merci pour votre aide :jap:

Reply

Marsh Posté le 04-08-2005 à 14:44:12   

Reply

Marsh Posté le 05-08-2005 à 13:40:49    

J'ai trouvé l'erreur : il y a eu confusion entre l-value et r-value (mis en évidence à la ligne 5); il faut utiliser des pointeurs, le bon code est donc :
 

Code :
  1. let ordre_lexico t1 t2 =
  2. (*t1 et t2 tableaux*)
  3.   let i=ref 0 and l=Array.length t1 in
  4.   while !i<l && t1.(!i)=t2.(!i) do
  5.     i := !i+1
  6.   done;
  7. !i=l or t1.(!i)>t2.(!i);;


 
J'ai supprimé res qui ne servait à rien (et qui surtout n'était pas mis à jour correctement non plus  :heink:).


Message édité par higlander le 05-08-2005 à 13:57:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed