私は F# に関しては非常に緑色で、再帰関数を扱う小さな問題に出くわしました。
次の偶数を吐き出すことになっている関数があります。
let rec nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y
// This never returns..
nextEven 3;;
再帰的になるように「rec」キーワードを使用しますが、使用すると、何らかの理由で無限ループで実行されます。関数を次のように書き直すと:
let nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y
その後、すべて正常に動作します (rec キーワードなし)。関数が再帰的であるため、何らかの理由で「rec」が必要でしたが(なぜそうしないのですか?)、関数の最初のバージョンが永遠に実行されるのはなぜですか?
編集
これはまったくの初心者の間違いであることが判明しました。コメントと回答で説明されているように、途中で関数の複数の定義を作成しました。