Boucle for en Caml

Boucle for en Caml - Langages fonctionnels - Programmation

Marsh Posté le 30-11-2008 à 20:40:17    

Bonjour,
 

Code :
  1. let jouer
  2. (lejeu : jeu)  (* Le jeu sur lequel on travaille *)
  3. : unit
  4. = for i=0 to 2 do
  5.     print_string "Coup à jouer: ";
  6.     let clavier = read_line() in
  7.        print_int (convertirCoup clavier);
  8.        let lejeu=(jouerCoup lejeu clavier) in
  9.        print_jeu lejeu;
  10.   done;;


 
 
Mon problème c'est qu'à chaque tour de boucle, je reparts du jeu du début (celui passé en paramètre)  
et non pas du nouveau jeu modifié suite au coup jouer !!!!
Je ne vois pas comment faire  pour corriger ce problème.
 
Merci d'avance piur votre aide !!!

Reply

Marsh Posté le 30-11-2008 à 20:40:17   

Reply

Marsh Posté le 30-11-2008 à 21:33:38    

C'est parfaitement normal, ocaml c'est pas C.
 
Quand tu écris

Code :
  1. let lejeu=(jouerCoup lejeu clavier) in print_jeu lejeu


tu crées un binding "lejeu" local à ton let, ça ne modifie pas le jeu externe [:spamafote]
 
Au lieu d'utiliser un for tu devrais utiliser une fonction récursive. Il n'y a de toute façon pas de raison d'utiliser une boucle for dans un langage fonctionnel.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-12-2008 à 09:47:05    

Merci.
Mais je dois vraiment passé par cette boucle for.  
En effet, je ne vois pas comment faire à cause des différents affichage et du read_line qui sont de type unit pour faire cette fonction autrement qu'en impératif !!!
Donc j'aimerai savoir comment modifié ce petit morceau de code pour qu'il ne pre nne pas à chaque tour de boucle le jeu passé en paramètre mais le nouveau jeu obtenu en jouant un coup !!!
Merci d'avance


Message édité par lezert le 01-12-2008 à 09:51:50
Reply

Marsh Posté le 01-12-2008 à 10:07:08    

Merci Masklinn !!!
Je suis passé par de la recursivité et ça marche super bien !!!
Encore merci

Reply

Marsh Posté le 12-05-2013 à 13:45:49    


je rencontre un probleme avec ma fonction union dont voici l'erreur affiche " Error: This expression has type ensemble * ensemble
       but an expression was expected of type ensemble "
 
 
voici ma fonction qui a pour but de calcule l’union de deux ensembles
 
  let union a b =
     let rec aux abr acc =
       match abr with  
         Vide,Vide -> Vide
       |Noeud(c,i,ag,ad),Vide -> abr
       |Vide,Noeud(c2,i2,ag2,ad2) -> acc
       |Noeud(c,i,ag,ad),Noeud(c2,i2,ag2,ad2) -> if (Ord.compare i i2) != 0 then (ajoute i2 ( aux ag ( aux ad acc)))
  else (aux ag ( aux ad acc))
     in aux a b
 
besoin d'aide svp

Reply

Sujets relatifs:

Leave a Replay

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