我试图在 haskell 上创建一个函数,我知道该函数的定义如下:
justWithA : [Char] -> Bool
justWithA [] = True
justWithA (x:xs) | (x == "a") = x + justWithA xs
| else (x == "e") = False
| else (x == "i") = False
| else (x == "o") = False
| else (x == "u") = False
Run Code Online (Sandbox Code Playgroud)
我认为有更好的方法来定义这个函数,只是不知道正确的方法......
目前的实施存在一些问题:
else关键字;x是a Char,所以你比较的是x == 'a',不是x == "a"x + justWithA xs没有意义,因为x是 aChar并且不能将 aChar和加Bool在一起;和您可以使用以下方法修复该功能:
justWithA : String -> Bool
justWithA [] = True
justWithA (x:xs)
| x == 'a' = justWithA xs
| x == 'e' = False
| x == 'i' = False
| x == 'o' = False
| x == 'u' = False
| otherwise = justWithA xsRun Code Online (Sandbox Code Playgroud)
我们在这里只寻找元音,如果有一个元音是e,,,或,那么我们返回。iouFalse
我们可以将其简化为:
justWithA :: String -> Bool
justWithA = all (`notElem` "eiou")Run Code Online (Sandbox Code Playgroud)
或者如果您也想考虑大写:
justWithA :: String -> Bool
justWithA = all (`notElem` "eiouEIOU")Run Code Online (Sandbox Code Playgroud)