3

我正在创建 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 不匹配。

如何强制整数除法,或将表达式转换为整数?如果两者都可以,那么哪个更好?

4

2 回答 2

5

是的,您使用了错误的运算符。/是浮点除法运算符。div(如 D.Shawley 所述)是整数除法运算符。div在这种情况下使用是正确的,因为您正在划分两个整数并想要获得一个整数。

于 2009-04-14T05:36:08.137 回答
2

SML有没有div运营商?自从我玩 ML 以来已经有好几年了,但这似乎是一种强制整数除法的非常标准的方法。

于 2009-04-14T03:09:15.027 回答