我为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
有人可以解释这意味着什么以及我应该做出哪些改变?提前致谢
答案 0 :(得分:3)
你的前两个案例说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
中本地定义辅助函数。