我正在开发一个函数,它将一个数字中的所有数字相加,并继续将数字相加,直到数字减少到一个数字。例如,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"