【问题标题】:How to coerce a type in SML (like casting)如何在 SML 中强制类型(如强制转换)
【发布时间】:2010-10-19 06:08:43
【问题描述】:

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

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

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多