обработка исключений в ML - PullRequest
       4

обработка исключений в ML

2 голосов
/ 21 декабря 2010

каждый, я пытаюсь понять, как исключения работают в 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.";

что может быть не так? заранее спасибо за любую помощь.

1 Ответ

7 голосов
/ 21 декабря 2010

Вы должны убедиться, что factorial_driver имеет согласованный тип. Неисключительный регистр возвращает int, поэтому ML выводит, что функция имеет тип unit -> int, но исключительный регистр (то есть выражение print) возвращает unit, а не int.

Как правило, во всех случаях вам необходимо возвращать значение одного и того же типа.

...