递归模式匹配,输出问题



我正在尝试使用模式匹配和递归来用其他单词替换列表中的一些单词。模式匹配并不是在所有情况下都有效,我的代码也不是在所有的情况下都使用模式匹配生成更改的字符串列表。

我想知道是否有人能帮我确定这是为什么?

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 (x:as) = (x: pattr as)

您在上一个案例中没有递归。因此,如果列表中的第一个单词与任何模式都不匹配,它就会停止,不检查列表中后面的单词。

最新更新