2009-04-14 326 views
3

我创建的有理数(INT * INT)的结构及我的功能之一是:如何SML(如铸件)强迫型

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。当我尝试在diff声明的末尾添加: int * int时,它给了我一个表达式real * real和int * int不匹配的类型错误。

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

回答

5

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

2

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