使用SML的整数中的数字总和

时间:2016-09-15 01:11:19

标签: casting functional-programming type-conversion sml ml

我试图创建一个函数,该函数将在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

1 个答案:

答案 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)