OCaml对象中的递归函数

时间:2009-03-09 12:00:04

标签: oop recursion methods ocaml

我试图在对象的方法的上下文中找出OCaml的递归。我已经尝试了以下代码,但似乎无法将其编译。

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

如何在方法中创建此类递归函数?

修订代码:

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

3 个答案:

答案 0 :(得分:4)

您仍需要在loopTest方法中调用doIt。 let只是定义了doIt,就像method只定义一个方法一样,并没有调用它。编译器检测到这一点,因为它不知道从loopTest返回什么(比如没有返回类型为void的方法,但在C#或Java中没有实现)。

此外,您正在使用此代码进行无限循环,可能if x>1 then doIt (x-1)后跟doIt 100是更好的主意。

答案 1 :(得分:2)

我的OCaml很生疏,但我不认为让它评估它的约束力。如果你想让testLoop调用doIt,请使用doIt或类似函数。

答案 2 :(得分:0)

同一代码中的两个无限循环;),你应该了解迭代器我猜;)