Я пытаюсь решить простую проблему на HackerRank и получаю ошибку в названии. Я Haskell noob так голый со мной. Задача требует взять строку и уменьшить ее, удалив соседние пары букв. Например, «aabcdd» => «bc». Вот мой код:Haskell манипуляции строк. Неисчерпывающие шаблоны в функциональной ошибке.
main :: IO()
main = do
line <- getLine
putStrLn (reduce' line)
reduce' :: String -> String
reduce' [] = []
reduce' (x0:x1:xs)
| x1:xs == [] = [x0]
| x0 == x1 = reduce' xs
| otherwise = x0 : x1 : reduce' xs
Я смущен, потому что думаю, что у меня есть кромки. Я не хочу отвечать на проблему, я просто хочу знать, почему я получаю ошибку. Благодаря!
Прошло некоторое время с тех пор, как я написал Haskell, но iirc, ваш последний случай будет соответствовать ровно 3 символам. Если строка имеет 1 или 2 элемента, она не будет соответствовать. – Carcigenicate
@Carcigenicate: нет двух элементов 'xs' - это хвост списка. –
@WillemVanOnsem О, верно. Так что всего один элемент. – Carcigenicate