私はMLが初めてです。
条件式を引数として取る関数を定義する必要があります。問題は、式が のように無効である場合"10 div 0 = 0"
です。どうすればこれを処理できますか?
たとえば、関数は次のように定義されます。foo exp1 = if (exp1) then ... else...
、およびexp1
is "10 div 0 = 0"
、この除算エラーの処理方法。
私はMLが初めてです。
条件式を引数として取る関数を定義する必要があります。問題は、式が のように無効である場合"10 div 0 = 0"
です。どうすればこれを処理できますか?
たとえば、関数は次のように定義されます。foo exp1 = if (exp1) then ... else...
、およびexp1
is "10 div 0 = 0"
、この除算エラーの処理方法。
SML の例外処理機構についてお聞きになりたいようです。
SML 基底ライブラリのdiv
関数は、 を呼び出すと Div 例外を発生させます10 div 0
。例外を処理するために値が必要かどうかによって異なります。この場合、true/false またはオプション タイプのいずれかを返すことができます。
(* only catch exception, ignore value *)
fun div_check (x, y) = (
ignore (x div y);
false
) handle Div => true
(* catch exception and return option value *)
fun div_check2 (x, y) = (
SOME (x div y)
) handle Div => NONE
アップデート:
Div
この場合、コンパイラが例外を発生させないのは本当に奇妙です。カスタム div 関数を定義し、自分で例外を発生/処理することをお勧めします。
exception DivByZero;
(* custom div function: raise DivByZero if y is zero *)
infix my_div;
fun x my_div y =
if y=0 then raise DivByZero else x div y
fun div_check (x, y) = (
ignore (x my_div y);
false
) handle DivByZero => true
fun div_check2 (x, y) = (
SOME (x my_div y)
) handle DivByZero => NONE