我试着去解决这个问题。 我需要做一个列表中的元素的总和,这些元素只能用“0”相互分隔。 因此,例如我可以有这样的输入:[1,2,3,0,3,4,0,2,1] 和输出应该是[6,7,3]。
到目前为止,我设法做这样的事情:
cut (x:xs) | x > 0 = x : (cut xs)
| otherwise = []
first (xs) = ((foldl (+) 0 (cut (xs))) ) : []
second (xs) = ((foldl (+) 0 (cut (reverse (xs)))) ) : []
test (xs) = first(xs) ++ second(xs)
问题是,这只是在我的名单只有1个“0”的情况下工作。
我试图通过编辑我的剪切功能来解决这个问题:
cut [] = []
cut (x:xs) | x > 0 = foldl (+) 0 (x : cut xs) : []
| x == 0 = (cut xs)
但我无法弄清楚如何调整它,所以它会分开的款项。现在它只是抛出所有元素的总和作为输出。
谢谢,这是我完美的解决方案,因为我需要使用foldl(+)0.所以我有这样的:map(foldl(+)0)(groupBy ... []) – mtzero 2012-04-08 17:18:25
感谢您的解释,现在我更清楚地理解它。 – mtzero 2012-04-08 20:49:44