2016-09-15 12 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) 

実際に変数を型キャストしようとしましたが、機能しませんでした。また、私はなぜこのエラーが発生しているのか分かりません。 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 

答えて

1

ルックス:

コードは次のようです。開始するには、整数を分割するときに "/"ではなく "div"を使用します。 /は本当のためです。また、truncは実数の関数です。 3つ目は、再帰的なロジックをsumDigits(n div(d * 10))ではなくsumDigits(n div 10)にすることです。また、d変数を削除してコードをクリーンアップすることもできます。

fun sumDigits (n) = 
    if n < 10 then n 
    else 
    n mod 10 + sumDigits(n div 10) 
関連する問題