2009-03-09 7 views
3

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. Comment créer une fonction récursive de ce type dans une méthode?Fonctions récursives dans les objets OCaml

Revised Code:

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;; 

Répondre

3

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

En outre, vous êtes dans une boucle infinie avec ce code, peut-être if x>1 then doIt (x-1) suivi par doIt 100 est une meilleure idée.

2

Mon OCaml est rouillé, mais je ne pense pas laisser evalue à ce qu'elle lié. Si vous voulez que testLoop appelle doIt, virer sur un in doIt ou similaire.

-1

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

+0

c'est vrai mec: D – 0xFF

Questions connexes