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

3 回答 3

4

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

此外,您正在使用此代码进行无限循环,也许if x>1 then doIt (x-1)接下来doIt 100是一个更好的主意。

于 2009-03-09T13:28:48.957 回答
2

我的 OCaml 生锈了,但我不认为 let 评估它绑定的内容。如果您希望 testLoop 调用 doIt,请添加一个 in doIt 或类似内容。

于 2009-03-09T13:19:12.023 回答
0

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

于 2009-03-28T14:57:08.523 回答