2016-09-15 3 views
0

Я пытаюсь создать функцию, которая будет суммировать цифры целого в SML, но я получаю следующую ошибку.Сумма цифр в целых числах с использованием SML

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

Я попытался преобразовать переменные в реальность, но это не сработало. Также я не понимаю, почему я получаю эту ошибку. Невозможно использовать такие операторы, как * и/с int и real в SML?

Код следующее:

fun sumDigits (n) = 
    if n < 10 then n 
    else 
    let 
     val d = 10 
    in 
     n mod d + sumDigits(trunc(n/(d*10))) 
    end 

ответ

1

Похоже, у вас есть несколько вещей неправильно. Для начала вам нужно использовать «div», а не «/» при делении целых чисел./для реалов. Кроме того, trunc является функцией для реалов. 3rd, вы хотите, чтобы ваша рекурсивная логика просто была 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) 
Смежные вопросы