Я пытаюсь использовать сопоставление и рекурсию для замены некоторых слов в списке другими словами. Совпадение шаблонов не работает во всех случаях, и мой код не создает список строк, измененных с использованием сопоставления шаблонов во всех случаях.Рекурсия Pattern Matching, проблема с выпуском
Мне было интересно, может ли кто-нибудь помочь мне определить, почему это так?
pattr :: [[Char]] -> [[Char]]
pattr [] = []
pattr ("you":as) = ("u":pattr as)
pattr ("see":"you":as) = ("seaya":pattr as)
pattr ("by":"the":"way":as) = ("btw":pattr as)
pattr ("laugh":"out":"loud":as) = ("lol":pattr as)
pattr ("for":"your":"information":as) = ("fyi":pattr as)
pattr (x:as) = (x:as)
Примеры:
GHCi> pattr ["milk", "see", "you", "soon"]
> ["milk", "see", "you", "soon"]
GHCi> pattr ["see", "you", "soon"]
> ["cya", "soon"]
Вы можете оставить скобки на правой руке, например, 'pattr (" you ": as) =" u ": pattr as'. С левой стороны он должен быть заключен в круглые скобки, чтобы быть одним аргументом с шаблоном, но с правой стороны это просто выражение и не изменяет значение, независимо от того, заключен ли вы в скобки или нет. Кроме того, было бы более обычным видеть '(x: xs)' вместо '(x: as)'. Первая форма означает, что 'x' является только первым из многих аналогичных элементов (так что' xs' - это просто множественное число 'x'), а второе означает, что' x' как-то отличается от остальной части списка, что казалось бы, состоял из множества «а». – Boris