2つの数値の最大公約数を計算する次の関数を定義しました。"rec"が必要な理由
let rec gcd n m = if m = 0 then n else gcd m (n mod m);;
キーワードrec
なしでは機能しません。
私は不思議ですが、なぜ、rec
が必要なのですか?
gcd
というスコープ内に他の機能はありません。したがって、コンパイラが何を呼び出す必要があるのかはっきりしています。
別の関数gcd
が有効な場合でも、コンパイラは何らかの順序でマッチングを試み、Haskellのようなものを見ることができます。
これが有用な理由の例を挙げることができますか?
'rec'は、TCOを実行することを示していますか?その場合、スカラの再帰的アノテーションのように、再帰を最適化できない場合に警告します。 – Carcigenicate
@Carcigenicate:いいえ、recは任意の再帰関数定義に必要です。 – Marth
[なぜOcaml/F#の関数がデフォルトで再帰的でないのですか?](http://stackoverflow.com/questions/900585/why-are-functions-in-ocaml-f-not-recursive-by-default ) – Marth