数値のすべての桁を合計し、数値が1桁になるまで桁を加算し続ける関数に取り組んでいます。たとえば、番号は次の99999999999
ように評価する必要があります。
99999999999
9+9+9+9+9+9+9+9+9+9+9
99
9+9
18
1+8
9
ただし、99999999999
関数で数値を実行しようとすると、を返す7
はずなのに、を返し9
ます。私は自分のコードを何度か調べましたが、その理由は考えられません。
コードは次のとおりです。
sumdr x
| x <= 9 = x
| otherwise = sumdr $ addupnums x
addupnums y = foldl (+) 0 $ map read1 $ show y
read1 :: Char -> Int
read1 '1' = 1
read1 '2' = 2
read1 '3' = 3
read1 '4' = 4
read1 '5' = 5
read1 '6' = 6
read1 '7' = 7
read1 '8' = 8
read1 '9' = 9
read1 '0' = 0
read1 x = error "needs to be a number"