我试图创建一个函数,该函数将在SML中对整数的数字求和,但我得到以下错误。
Error: operator and operand don't agree [overload conflict]
operator domain: real * real
operand: [* ty] * [* ty]
in expression:
n / (d * 10)
我试图将变量强制转换为真实变量,但它并没有起作用。另外,我不明白为什么我会收到此错误。是不是可以在SML中使用*和/ with int和real等运算符?
代码如下:
fun sumDigits (n) =
if n < 10 then n
else
let
val d = 10
in
n mod d + sumDigits(trunc(n/(d*10)))
end
答案 0 :(得分:1)
看起来你有一些错误。首先,您要使用&#34; div&#34;而不是&#34; /&#34;分割整数时。 /是实物。此外,trunc是reals的函数。 3,你希望你的递归逻辑只是sumDigits(n div 10),而不是sumDigits(n div(d * 10))。您还可以通过删除d变量来清理代码。
fun sumDigits (n) =
if n < 10 then n
else
n mod 10 + sumDigits(n div 10)