我是Haskell的新手,我目前在學校學習它。我得到了一個學校任務,我必須解碼包含特定模式的消息,但我不知道如何執行此操作。Haskell - 用模式解碼消息
該模式看起來像這樣:如果一個字母有一個輔音,後面跟着字符'o',然後再次跟隨着相同的輔音,它應該替換那個子字符串(「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