从第二个字符串中删除第一个字符串中的所有字符的函数

时间:2019-10-16 18:39:20

标签: haskell recursion

我正在尝试编写一个函数,该函数从第二个字符串中删除第一个字符串中的所有字符。我需要使用递归和另一个删除的辅助函数,以删除所有出现的 字符串中的字符。我无法添加递归部分。

rmCharsRec是我要编写的函数,而rmChar是另一个函数。

rmCharsRec :: String -> String -> String
rmCharsRec [] ys = ys
rmCharsRec (x:xs) [] = []
rmCharsRec (x:xs) ys = rmChar x ys 

rmChar :: Char -> String -> String
rmChar c xs = filter ( /= c) xs

rmCharsRec ['a'..'l'] "football"

我期望输出“ oot”,但是却出现“ footbll”。

2 个答案:

答案 0 :(得分:4)

您说您需要使用递归,但是您在任何地方都没有调用它的函数。特别是,当您拥有x:xs时,您是否不应该在某个时候关心xs

答案 1 :(得分:2)

问题在于,在第三个子句中,您仅从字符串中删除了字符x。确实:

rmCharsRec :: String -> String -> String
rmCharsRec [] ys = ys
rmCharsRec (x:xs) [] = []
rmCharsRec (x:xs) ys = rmChar x ys

删除该字符后,您仍然需要删除列表xs其余部分中的其他字符。

因此,您应在此处递归,例如:

rmCharsRec :: String -> String -> String
rmCharsRec [] ys = ys
rmCharsRec (x:xs) [] = []
rmCharsRec (x:xs) ys = rmCharsRec … (rmChar x ys)

使用仍需要填写的部分。

相关问题