2009-03-09 13 views
3

Ich versuche Rekursion für OCaml im Kontext der Methode eines Objekts herauszufinden. Ich habe den folgenden Code ausprobiert, kann ihn aber anscheinend nicht kompilieren.Rekursive Funktionen innerhalb von OCaml-Objekten

Wie erstelle ich eine rekursive Funktion dieser Art innerhalb einer Methode?

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

Antwort

3

Sie müssen doIt immer noch in Ihrer LoopTest-Methode aufrufen. let definiert nur doIt, genau wie method definiert nur eine Methode und ruft sie nicht auf. Der Compiler erkennt dies, weil er nicht weiß, was er von loopTest zurückgeben soll (wie eine Methode, die keinen Rückgabetyp void hat, aber keine Implementierung in C# oder Java hat).

Auch Sie sind für eine Endlosschleife mit diesem Code, vielleicht if x>1 then doIt (x-1) gefolgt von doIt 100 ist eine bessere Idee.

2

Mein OCaml ist rostig, aber ich glaube nicht, auswertet lassen, was sie gebunden. Wenn Sie möchten, dass testLoop doIt aufruft, sollten Sie ein InDoT o.ä.

-1

Zwei Endlosschleifen im selben Code;), sollten Sie über Iteratoren lernen Ich denke;)

+0

das ist wahr, dude: D – 0xFF

Verwandte Themen