【发布时间】: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