2009-03-09 17 views
3

Bir nesnenin yöntemi bağlamında OCaml için yinelemeyi bulmaya çalışıyorum. Aşağıdaki kodu denedim ama derlemek için görünmüyor olabilir.OCaml nesneleri içinde özyinelemeli işlevler

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

Bu sıralamada bir yöntem içinde nasıl tekrarlamalı bir işlev oluşturabilirim?

Revize kodu:

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

cevap

3

Eğer hala, buradakileri kullanmayacaksınız. let, sadece method gibi sadece bir yöntemi tanımlar ve onu çağırmaz. Derleyici, loopTest'ten ne döneceğini bilmediğinden (dönüş türü geçersiz olmayan, ancak C# veya Java'da hiçbir uygulamaya sahip olmayan bir yöntem gibi) bunu algılar.

Ayrıca, bu kod ile sonsuz bir döngü içinde konum, belki de if x>1 then doIt (x-1) ve daha sonra doIt 100 daha iyi bir fikir.

2

My OCaml paslı, ama o bağlı ne değerlendirir izin sanmıyorum. Eğer testLoop 'u çağırmak istiyorsanız, doIt veya benzeri bir yere yapıştırın.

-1

Aynı koddaki iki sonsuz döngü;), yineleyiciler hakkında bilgi edinmelisiniz;)

+0

bu gerçek dostum: D – 0xFF