【问题标题】:Sum of digits in an integer using SML使用 SML 的整数中的数字总和
【发布时间】:2023-11-07 13:16:01
【问题描述】:

我正在尝试创建一个函数,将 SML 中整数的数字求和,但出现以下错误。

Error: operator and operand don't agree [overload conflict]
  operator domain: real * real
  operand:         [* ty] * [* ty]
  in expression:
    n / (d * 10)

我尝试将变量类型转换为实数,但没有成功。我也不明白为什么我会收到这个错误。在 SML 中不能使用 * 和 / 等运算符与 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

【问题讨论】:

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


    【解决方案1】:

    看起来你有一些问题。首先,在划分整数时,您需要使用“div”而不是“/”。 / 是实数。此外,trunc 是一个实数函数。第三,你会希望你的递归逻辑只是 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)
    

    【讨论】:

      最近更新 更多