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;;
解決
loopTestメソッドでdoItを呼び出す必要があります。 let
はdoItを定義するだけで、 method
はメソッドを定義するだけで、呼び出しません。コンパイラは、loopTestから何を返すかを知らないため、これを検出します(戻り値型voidを持たないが、C#またはJavaで実装されていないメソッドなど)。
また、このコードで無限ループに陥ります。おそらく if x&gt; 1の場合、doIt(x-1)
に続いて doIt 100
が良いでしょうアイデア。
他のヒント
OCamlは錆びていますが、letがバインドされたものを評価するとは思いません。 testLoopでdoItを呼び出したい場合は、doItまたは同様のものを追加します。
同じコード内の2つの無限ループ;)、私が推測するイテレータについて学ぶ必要があります;)
所属していません StackOverflow