私は ocaml を学び始めており、この言語の再帰の力を本当に高く評価しています。ただ、一つ気になるのはスタックオーバーフローです。
ocaml が関数呼び出しにスタックを使用すると、最終的にスタックをオーバーフローしませんか? たとえば、次の関数があるとします。
let rec sum x =
if x > 1 then f(x - 1) + x
else x;;
最終的にスタックオーバーフローを引き起こす必要があります。C++ で (再帰を使用して) 同等のことを行うと、オーバーフローすることがわかっています。
私の質問は、関数型言語がスタックをオーバーフローするのを防ぐためのセーフガードが組み込まれているのでしょうか? そうでない場合、上記の合計アルゴリズムは for ループを使用した手続き型スタイルで記述されており、(整数オーバーフローを無視して) 任意の数を処理できるため、このようにあまり有用ではありませんか?