使用列表理解的非负数的位数总和



我正在寻找一个非负数的数字和("叉和"(的非递归实现,如下所示:

cs :: Int -> Int 
cs n = sum digits_of_n where digits_of_n = [ . | ... ] 

基本上:如何仅使用列表理解从非负整数中获得数字列表?

交叉和示例:157的交叉和为1+5+7=13

";通常的方式";将使用模和除法递归地从数字中提取数字,然后像这样求和:

cs :: Int -> Int
cs n = if n == 0 then 0 else n `mod` 10 + cs (n `div` 10)

然而,如果没有递归和列表理解,我很难表达这一点,有人对此有想法吗?

sume n =  foldr (+) 0 [  digitToInt c | c <- show n, isDigit c ]

最新更新