【问题标题】:Sum of digits of non-negative number using list comprehension使用列表理解的非负数的数字总和
【发布时间】:2021-08-11 00:38:46
【问题描述】:

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

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)

但是,如果没有递归和列表理解,我很难表达这个,有人对此有想法吗?

【问题讨论】:

  • 不确定你在这里的限制(家庭作业?),但我猜cs :: Int -> [Int]; cs n = [ read [d] | d <- show n ] 打勾并且正在使用列表理解
  • “我什么都没试过,我完全没有想法”在这里并没有真正飞来飞去。在人们对帮助你感到兴奋之前,你需要付出真诚的努力。阅读一些教程,尝试一些事情,让编译器向您抛出各种错误,修复您可以修复的内容,然后在您付出一些努力但遇到特定问题时回来。
  • 感谢您的评论,我已经编辑了这个问题,希望它现在更有意义。那么有人可以解开这个问题吗?

标签: haskell sum list-comprehension digits sum-of-digits


【解决方案1】:
sume n =  foldr (+) 0 [  digitToInt c | c <- show n, isDigit c ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多