我是ML的新手。如何處理ML除以零誤差
我需要定義一個函數以條件表達式作爲參數,問題是如果表達式無效,如"10 div 0 = 0"
。我該如何處理?
例如,函數定義如下:foo exp1 = if (exp1) then ... else...
和exp1
是"10 div 0 = 0"
,如何處理這種除法錯誤。
我是ML的新手。如何處理ML除以零誤差
我需要定義一個函數以條件表達式作爲參數,問題是如果表達式無效,如"10 div 0 = 0"
。我該如何處理?
例如,函數定義如下:foo exp1 = if (exp1) then ... else...
和exp1
是"10 div 0 = 0"
,如何處理這種除法錯誤。
它看起來像你想問關於SML中的異常處理機制。
SML基礎庫中的div
函數在調用10 div 0
時引發Div異常。這取決於您是否需要值或不處理異常。您可以在此情況下,返回真/假或選項類型:
(* 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
您可以發佈會是什麼樣正常語法像一個代碼塊,這樣也許有人可以嘗試幫助你.. – MethodMan
例如,如果我將在C#中編碼的東西我會用這種類型的語法inline int roundDownDivide(int a,int b){if(a> = 0)return a/b;否則返回(a-b + 1)/ b; } – MethodMan
@DJKRAZE我更新了我的問題。謝謝 – Jensen