2016-05-09 149 views
1

我必須總結這樣一個列表的元素,例如: 如果您的輸入是['a','b','c'],輸出應該是["a","ab","abc"]。 但我不知道如何編碼...有人可以給我一個提示嗎? 我將不勝感激!Haskell:總結列表中的元素

+0

提示?好的:如果這些是[非空列表](http://hackage.haskell.org/package/semigroups-0.18.1/docs/Data-List-NonEmpty.html#t:NonEmpty),那麼你可以使用[重複](http://hackage.haskell.org/package/comonad-5/docs/Control-Comonad.html#v:duplicate)comonad方法。 (沒有真正一致的方式來定義空列表的結果應該是什麼!)但是,我認爲,現在我認爲這會對你有很大的幫助,我認爲我們可以給予的任何其他答案都會像第一個那樣幫助你閱讀一些教程。我總是推薦[LYAH](http://learnyouahaskell.com/)。 – leftaroundabout

+0

你知道模式匹配嗎? – PyRulez

+6

稍微簡單一點的提示可能會指向['scanl'](http://hackage.haskell.org/package/base-4.8.2.0/docs/Prelude.html#v:scanl);) –

回答

1

所有這些提示都很好,但你可能與那些過於

我建議掙扎您從這裏開始:

sumList [] = [] 
sumList [x] = [[x]] 
sumList (x:xs) = ... : map (...) (sumList xs) 

,並嘗試找出你有什麼投入都...提示不一樣;))

第一行只是在那裏給一個空的列表作爲輸入一些合理的結果 - 你可以刪除它(遞歸不應該打它)

第二個會做[1] -> [[1]]

現在,你必須弄清楚如何與更多的事 - 在這裏是一個額外的提示:

sumList [1,2] 
{ 3. line - x = 1, xs = [2] } 
= ... : map (...) (sumList [2]) 
{ 2. line } 
= ... : map (...) [[2]] 

現在你

= [[1],[1,2]] 

所以它看起來像你可以這樣做

first ... = [1] 
second ... = map (prepend 1) to every list in [[2]]