2010-12-21 43 views
2

大家,我想了解例外ML工作,但我有奇怪的錯誤,我無法弄清楚什麼是錯的:在ML處理異常

exception Factorial 

fun checked_factorial n = 
    if n < 0 then 
    raise Factorial 
    else n; 

fun factorial_driver() = 
    checked_factorial(~4) 
    handle 
    Factorial => print "Out of range."; 

什麼可能是錯了嗎?在此先感謝您的幫助。

回答

6

您需要確保factorial_driver具有一致的類型。非例外情況返回int,因此ML推斷函數的類型爲unit -> int,但例外情況(即print表達式)返回unit,而不是int

通常,您基本上需要在所有情況下返回相同類型的值。