重载冲突,单位为ML(SML/NJ)
我为ML编写了以下代码:重载冲突,单位为ML(SML/NJ),sml,smlnj,Sml,Smlnj,我为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
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
有人能解释一下这意味着什么,我应该做些什么改变吗?提前感谢您的前两个案例说明
get_digits
的参数是一对整数和一个列表
然后,您的第三个案例尝试将div
和mod
应用于这样一对,但这不起作用
由于无法定义以数字或对作为参数的函数,因此需要使用两个函数:
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
中本地定义helper函数