4

我是 ML 新手。

我需要定义一个以条件表达式作为参数的函数,问题是表达式是否像"10 div 0 = 0". 我该如何处理?

例如,函数定义如下:foo exp1 = if (exp1) then ... else...exp1is "10 div 0 = 0",如何处理这个除法错误。

4

1 回答 1

4

看来您想询问 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
于 2011-12-06T16:31:09.217 回答