Я создаю структуру Rationals (int * int), и одна из моих функций:
fun diff ((n, d), (n', d')) = let val (top, bot) = sum ((n, d), (~n', d'))
in
(top / gcd(top, bot), bot / gcd(top, bot))
end
gcd дает мне наибольший общий знаменатель, поэтому я получаю не 2/8, а 1/4, как и должно быть. gcd использует mod для поиска gcd, поэтому возвращает int. Но я не могу получить выражение с делением, которое будет напечатано как int. Когда я попытался добавить : int * int
в конец объявления diff, это выдает ошибку типа, что выражения real * real и int * int не совпадают.
Как я могу форсировать целочисленное деление или привести выражение к целому числу? Если оба варианта возможны, какой из них лучше?