2012-09-18 141 views
2

我很難開始這個,因爲我不確定這個函數到底發生了什麼。它應該做的是接受2個參數,一個字符和一個字符串,然後輸出由該字符分隔的字符串列表。Haskell:調用其他函數+遞歸

例如,

break ',' "abc,def,ghi" 

應該輸出[ 「ABC」, 「DEF」, 「GHI」]

我給出的代碼,我應該填寫「? 「s

break ? [] = ? 
break n xs = brk n xs ? 
where 
brk n xs acc 
    | xs == [] = ? 
    | n == ? xs = ? ++ break n (? xs) 
    | ? = brk n (? xs) (acC++ ?) 

我不知道如何解決這個問題或acc如何解決這個問題。我唯一的想法是,第一行應該是

break _ [] = [] 

如果有人可以幫我開始處理這個問題,那太棒了!謝謝!

+1

我認爲這是家庭作業...僅供參考這種類型的尾遞歸在Haskell中並不像您想象的那麼好,您通常可以通過守護遞歸逃脫。 –

回答

6

acc是「累加器」的縮寫 - 您可以在遞歸時使用它來累加結果。看看類型的breakbrk一些線索:

break :: (Eq a) => a -> [a] -> [[a]] 
brk :: (Eq a) => a -> [a] -> [[a]] -> [[a]] 

或者更具體:

break :: Char -> String -> [String] 
brk :: Char -> String -> [String] -> [String] 

這裏有一些問題,幫助你找出如何實現brk

  • 最初的一組結果應該是什麼?

  • 當你拆分一個空列表時應該得到什麼?

  • 當分割字符出現在字符串的開頭時應該怎麼做?

  • 你應該怎麼做?