私はHaskellを初めて使い、現在学校で学んでいます。私は特定のパターンを含むメッセージをデコードする必要がある学校の仕事を持っていますが、これをどうやって行うのか分かりません。Haskell - パターン付きメッセージのデコード
文字の後に子音があり、その後に同じ子音が後に続く場合、その部分文字列( "XoX"はXが子音)を置き換える必要があります。子音だけでたとえば、文字列 "hohejoj"をデコードすると "hej"が返されます。私がこれをうまく説明していれば申し訳ありませんが、私はあなたが理解していると思います。
これは私がこれまで持っている(しかし、それは動作しません)コードです:¨
karpsravor :: String->String
karpsravor s = karpsravor_help s ""
where karpsravor_help s res
|s == "" && (last res) == 'o' = (init res)
|s==""=res
|otherwise = karpsravor_help (drop 3 s) (res ++ (consDecode (take 3 s)))
consDecode :: String->String
consDecode a
|(length a) < 3 = ""
|a == [(head a)]++"o"++[(head a)] = [(head a)]
|otherwise = a
コードが完全に壊れたと下手に書かれた(ダム法)であるが、私はどのようにのために他のアイデアを持っていませんこれを解決する。助けてください!
「head、tail」のような機能は部分的なものであり、空のチェックを忘れるとプログラムがクラッシュする可能性があります。可能であれば避けてください。彼らは安全であるので、代わりにパターンマッチングを好む慣習的なHaskellではありません。 '長さa <3 'もパターンマッチングに比べて非効率的である。 – chi