OCaml对象内的递归函数

3

我正在尝试在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个回答

4
您仍然需要在loopTest方法中调用doIt。let只是定义doIt,就像method只是定义方法一样,并不会调用它。编译器检测到这一点,因为它不知道从loopTest返回什么(就像C#或Java中没有实现但没有返回类型为void的方法一样)。
此外,您可能会陷入无限循环,也许if x>1然后doIt(x-1),然后跟着doIt 100是一个更好的选择。

2

我的 OCaml 有点生疏,但我认为 let 不会被评估为其所绑定的内容。如果你想让 testLoop 调用 doIt,请在 doIt 中添加 a 或类似的内容。


0

同一段代码中出现了两个无限循环;),你应该学习迭代器,我猜测这会有所帮助:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接