如何强制SML中的类型(如强制转换)

如何强制SML中的类型(如强制转换),sml,smlnj,Sml,Smlnj,我正在创建一个有理数结构(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))

我正在创建一个有理数结构(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不匹配


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

SML是否有一个
div
操作符?我已经多年没有使用ML了,但它似乎是强制整数除法的一种非常标准的方法。

是的,您使用了错误的运算符
/
是浮点除法运算符
div
(如D.Shawley所述)是整数除法运算符<在这种情况下,code>div是正确的选择,因为您将两个整数相除,并希望得到一个整数