Question

J'essaie de comprendre la récursivité pour OCaml dans le contexte de la méthode d'un objet. J'ai essayé le code suivant mais je n'arrive pas à le compiler.

class foo =
object (self)
 method loopTest =
  let rec doIt x =
   Printf.printf "%d\n" x;
   if x>1 then doIt (x+1)
end;;

Comment créer une fonction récursive de ce type dans une méthode?

Code révisé:

class foo =
object (self)
 method loopTest =
  let rec doIt x =
   Printf.printf "%d\n" x;
   if x<10 then doIt (x+1) in doIt 0
end;;
Était-ce utile?

La solution

Vous devez toujours appeler doIt dans votre méthode loopTest. let définit simplement doIt, tout comme la méthode définit simplement une méthode et ne l'appelle pas. Le compilateur le détecte car il ne sait pas ce qu'il doit renvoyer de loopTest (comme une méthode qui n'a pas de type de retour void, mais n'a pas d'implémentation en C # ou en Java).

De plus, vous avez une boucle infinie avec ce code, peut-être si x> 1 puis doIt (x-1) suivi de doIt 100 est un meilleur idée.

Autres conseils

Mon OCaml est rouillé, mais je ne pense pas laisser évaluer ce qu’il lie. Si vous voulez que testLoop appelle doIt, ajoutez-y un doIt ou similaire.

Deux boucles infinies dans le même code;), vous devriez en apprendre davantage sur les itérateurs, je suppose;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top