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

时间:2009-04-14 00:33:33

标签: sml smlnj

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

SML是否有div运算符?我玩ML已经好几年了,但这似乎是强制整数除法的一种非常标准的方式。