我試着去解決這個問題。 我需要做一個列表中的元素的總和,這些元素只能用「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