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

Kai*_*Kai 3 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
Run Code Online (Sandbox Code Playgroud)

gcd给了我最大的共同点,所以我最终得到2/8,而不是它应该是1/4.gcd使用mod来查找gcd,因此它返回一个int.但我不能得到分区的表达式作为int类型.当我尝试添加: int * int到diff声明的末尾时,它给出了一个类型错误,表达式real*real和int*int不匹配.

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

new*_*cct 5

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