оператор и операнд не согласовывают ошибку в этой простой функции

#ml

#ml

Вопрос:

Рассмотрим это определение:

 fun abs(x:int):int = (x*x)/(~x);
  

которая должна возвращать абсолютное значение входных данных. Но когда функция вызывается, я получаю эту ошибку:

 Error: operator and operand don't agree [tycon mismatch]
  operator domain: real * real
  operand:         int * int
  in expression:
    x * x / ~ x
  

Что я делаю не так? Я неправильно использовал :int ?

Спасибо

Ответ №1:

В SML / это деление на вещественные числа. Для целых чисел вам нужно использовать div .

 > fun abs x = x*x div ~x;
val abs = fn : int -> int