2015-11-08 47 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设置括号。