Похоже, вы хотите спросить о механизме обработки исключений в SML.
Функция div
в базовой библиотеке SML вызывает исключение 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
UPDATE:
Действительно странно, что компилятор не вызывает исключение 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