Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ocaml

Problème avec l'incrémentation

    29 avril 2021 à 1:40:36

    Je commence à apprendre le code Ocaml, dans cet exercice il est nécessaire de compter le nombre d'opérations que chaque 
    fonction pasA et pasB fera, puis j'essaye de placer un compteur à l'intérieur de chaque fonction, donc je trouve
    quelques problèmes pour le faire correctement , et le code donne encore quelques problèmes, et c'est pourquoi
    je voudrais obtenir de l'aide, merci d'avance.

    let i= ref 0
    let incr()=
      i:=!i+1;;
    let rec pasA n  = 
      if n=0 then 0 else pasA (n-1) ;
      incr();;
    and pasB n = 
        if n=0 then 0 
        else if (n mod 2)=0 then pasA (n-2) 
        else pasA (n-1) ;
      incr() ;;


    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2021 à 18:59:37

      Pouah, mais pourquoi on te fait faire de l'impératif (utilisation de références) en Caml, je vois pas l'intérêt...

      Bref.

      Le problème, c'est que l'appel (récursif) à pasA renvoie le résultat, donc on ne peut pas appeler incr après. Il faut incrémenter i avant :

      let i = ref 0;;
      
      let incr() =
        i := !i+1
      ;;
      let rec pasA n  =
          if n = 0 then 0
          else begin
              incr();
              pasA (n-1)
          end
      ;;
      
      let pasB n =
          if n = 0 then 0
          else begin
              incr();
              if n mod 2 = 0 then pasA (n-2)
              else pasA (n-1)
          end
      ;;
      

      -
      Edité par cvanaret 29 avril 2021 à 18:59:59

      • Partager sur Facebook
      • Partager sur Twitter
        5 mai 2021 à 13:09:06

        Bonjour , je te remercie pour ta réponse elle a été bien utile .
        • Partager sur Facebook
        • Partager sur Twitter

        Ocaml

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown