Fonctions récursives dans les objets OCaml
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;;
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;)