【问题标题】:Overload conflict in ML (SML/NJ)ML 中的重载冲突 (SML/NJ)
【发布时间】:2015-05-20 21:53:04
【问题描述】:

我为 ML 编写了以下代码:

fun get_digits (0, s) = s
        | get_digits (d, s) = get_digits( d div 10, (d mod 10) :: s)
        | get_digits n = get_digits( n div 10, [n mod 10] );

但它给了我以下错误:

Error: Operator and operand do not agree (overload conflict)
operator domain: [mod ty] * [mod ty]
operand: ([mod ty] * [mod ty] list) * [int ty]
in expression
n div 10
Error: Operator and operand do not agree (overload conflict)
operator domain: [mod ty] * [mod ty]
operand: ([mod ty] * [mod ty] list) * [int ty]
in expression
n mod 10

有人可以解释这意味着什么以及我应该做出哪些改变吗?提前致谢

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    您的前两个案例说get_digits 的参数是一对整数和一个列表。

    然后您的第三个案例尝试将divmod 应用于这样的一对,这是行不通的。

    由于您无法定义将数字或对作为参数的函数,因此您需要使用两个函数:

    fun get_digits' (0, s) = s
      | get_digits' (d, s) = get_digits' (d div 10, (d mod 10)::s);
    
    fun get_digits n = get_digits' (n div 10, [n mod 10]);
    

    当然,您可以在get_digits 中本地定义辅助函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 2016-04-06
      • 2010-10-23
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多