0

パターンマッチングと再帰を使用して、リスト内の一部の単語を他の単語に置き換えようとしています。パターンマッチングはすべての場合に機能するわけではなく、私のコードは、すべての場合にパターンマッチングを使用して変更された文字列のリストを生成しません。

誰かが私がこれがなぜであるかを特定するのを手伝ってくれるかどうか疑問に思いましたか?

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"]
4

2 に答える 2

2

あなたはあなたの最後のケースで再発していません。したがって、リストの最初の単語がどのパターンとも一致しない場合、それは停止し、リストの後半にある単語をチェックしません。

于 2013-02-12T15:07:25.927 に答える
2

最後の行を変更するだけでよいようです。

pattr (x:as) = (x: pattr as)
于 2013-02-12T15:07:47.183 に答える