我正在创建一个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不匹配。
如何强制整数除法,或将表达式转换为整数?如果两者都可能,哪一个更好?
答案 0 :(得分:5)
是的,你使用的是错误的操作员。 /
是浮点除法运算符。 div
(如D.Shawley所述)是整数除法运算符。在这种情况下使用div
是正确的,因为你要分割两个整数并想得到一个整数。
答案 1 :(得分:2)
SML是否有div
运算符?我玩ML已经好几年了,但这似乎是强制整数除法的一种非常标准的方式。