Функция, которая удаляет все символы в первой строке из второй строки - PullRequest
2 голосов
/ 16 октября 2019

Я пытаюсь написать функцию, которая удаляет все символы в первой строке из второй строки. Мне нужно использовать рекурсию и другую вспомогательную функцию, которая удаляет, что удаляет все вхождения символа из строки. Я не мог добавить рекурсивную часть.

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 ]

4 голосов
/ 16 октября 2019

Вы говорите, что вам нужно использовать рекурсию, но нигде у вас нет функции, вызывающей саму себя. В частности, если у вас есть x:xs, не думаете ли вы, что вам нужно заботиться о xs в какой-то момент?

2 голосов
/ 16 октября 2019

Проблема в том, что в третьем предложении вы удаляете только символ x из строки. Действительно:

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

После того, как вы удалили этот символ, вам все равно нужно будет удалить другие символы в остальной части списка xs.

Таким образом, вы должны повторить здесь, например:

rmCharsRec :: String -> String -> String
rmCharsRec [] ys = ys
rmCharsRec (x:xs) [] = []
rmCharsRec (x:xs) ys = <b>rmCharsRec &hellip;</b> (rmChar x ys)

с &hellip; частью, которую вам еще нужно заполнить.

...