2015-11-08 42 views
1

遞歸刪除字符我有定義爲函數如下:Haskell中使用輔助功能

rmCharsRec :: String -> String -> String 

我有一個輔助功能rmChar定義如下,其去除的字符中出現的所有的字符串:

rmChar :: Char -> String -> String 

rmCharsRec應刪除第一個字符串中第二個字符串中每個字符的所有出現,並返回響應。

我曾嘗試以下:

rmCharsRec :: String -> String -> String 
rmCharsRec _ "" = "" 
rmCharsRec c:chars str = rmChar (c str) ++ rmCharsRec chars 

但似乎不工作。我總是得到以下錯誤:

file.hs:140:1: Parse error in pattern: rmCharsRec 

**這不是一個家庭作業問題*。我只是想從一系列練習中學習Haskell,而我堅持這一點,因爲我不明白爲什麼會出現錯誤。

有人能告訴我關於我的代碼有什麼問題嗎?

+0

提示:使用'foldl'遍歷要刪除的字符。 – Vektorweg

+2

我將在下一個練習中使用foldl。我想通過自己實現遞歸和使用foldl或foldr來看到區別:)感謝提示 – roshkattu

回答

4

如果你想寫像c:chars你需要把它的模式括號像這樣:

rmCharsRec (c:chars) str = ... 

,將解決你提到的錯誤信息,但我認爲這不是你唯一的問題」需要處理。

+0

確實。我剛纔看到我忘了'(c:chars)'。你是對的。看來我也有比這個更多的bug。 – roshkattu

+0

我會將您的答案標記爲正確的答案,因爲您向我提供瞭解答我的錯誤的答案。再次感謝 – roshkattu

0

您忘記在模式匹配中圍繞c:chars設置括號。