2

大家,我试图了解异常在 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.";

可能有什么问题?提前感谢您的帮助。

4

1 回答 1

8

您需要确保它factorial_driver具有一致的类型。非异常情况返回int,因此 ML 推断函数的类型为unit -> int,但异常情况(即print表达式)返回unit,而不是int

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

于 2010-12-21T08:23:20.883 回答