我是 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