和标题说的差不多。我有一个整数列表,如下所示:[1,2,3]。我想将其更改为整数 123。我的第一个想法是 concat,但这不起作用,因为它的类型错误,我尝试了各种方法,但通常最终只是返回相同的列表。非常感谢任何帮助。
另外,我已经找到了一种打印正确内容(putStr)的方法,除了我希望类型为 Integer 而 putStr 不这样做。
您可以使用foldl http://haskell.org/ghc/docs/6.10.4/html/libraries/base/Data-List.html#v:foldl组合列表中的所有元素:
fromDigits = foldl addDigit 0
where addDigit num d = 10*num + d
The addDigit
函数被调用foldl
从最左边的数字开始,一个接一个地添加数字。
*Main> fromDigits [1,2,3]
123
Edit:
foldl
从左到右遍历列表,添加元素以累积一些值。
第二个参数foldl
, 0
在这种情况下, 是过程的起始值。在第一步中,将该起始值与1
,列表的第一个元素,通过调用addDigit 0 1
。这导致 10*0+1 = 1。在下一步中,这个 1 与列表的第二个元素组合,通过addDigit 1 2
,给出 10*1+2 = 12。然后将其与列表的第三个元素组合,通过addDigit 12 3
,结果为 10*12+3 = 123。
因此,毫无意义地乘以零只是第一步,在接下来的步骤中,实际上需要乘法来将新数字添加到累积数字的“末尾”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)