次のコードは正しく機能します。
local
exception exc;
fun a 0 = 0
| a n = if (n>0) then n+ b (n-1) else raise exc
and b 0 = 0
| b n = if (n>0) then n+ a (n-1) else raise exc
in
fun some n = a n
handle exc => 0;
end;
some ~4;
val some = fn : int -> int
val it = 0 : int
しかし、 in
..end
部分の中に次の変更を追加すると
in
fun some n = a n
and some2 n = b n
handle exc => 0;
end;
そして同じ電話をかけるsome ~4;
次の出力が得られます。
val some = fn : int -> int
val some2 = fn : int -> int
E:\Program Files\SML_NJ\\bin\.run\run.x86-win32.exe: Fatal error -- Uncaught exception exc with 0
E:\GenCS\SML tutorial\some2.sml:181.49-181.52 で発生
例外がキャッチされないのはなぜですか? 希望する動作を得るには、コードをどのように変更すればよいですか?