int -> int 型の再帰関数 f(x) があるとします。x が大きいほど、再帰呼び出し f(x) が実行されることが予想されます。
昇順の整数の無限シーケンスが与えられた場合、f を使用すると StackOverflowException を引き起こすシーケンスの最初の整数に興味があります。
どうやってやるの?
これまでのところ、特定の整数に対して特定の関数を使用したときに StackOverflowException がスローされたかどうかをテストするだけの単純な関数を作成してみました。次のようになります。
let overflows f x =
try
ignore (f x) in false
with
| :? System.StackOverflowException -> true
しかし、それが意図されていたにもかかわらず、スローされたときに StackOverflowException をキャッチできないようです。
助言がありますか?