问题:翻译成“Pig Latin”的简单规则是取一个以元音开头的单词并添加“yay”,同时取任何以一个或多个辅音开头的单词并将它们转移到后面,然后再添加“啊”。例如,“able”变成“ableyay”,“stripe”变成“ipestray”。编写一个函数,将一串字母转换成它的 Pig-Latin 翻译。
执行:
-- define function to detect vowel
isVowel :: Char -> Bool
isVowel c = elem c ['u','e','o','a','i']
-- define function Latin Pig
lp ::String -> String
lp str = if (isVowel (head str)) then do {str ++ "yay"}
else
do {
str ++ (head str)
tail str
lp str
}
问题:到目前为止,我的代码(逻辑)没有任何问题。老实说,这是我的 Haskell 入门课程的作业。但是编译器给了我错误:
**Couldn't match expected type `t0 -> t1 -> t2 -> t3 -> [Char]'
with actual type `Char'
Expected type: [t0 -> t1 -> t2 -> t3 -> [Char]]
Actual type: String
In the first argument of `head', namely `str'
In the second argument of `(++)', namely
`(head str) tail str lp str'
Failed, modules loaded: none.**
我的代码有什么问题?!