我可以删除没有这样的递归函数的元音:
NoVowels:: String -> String
NoVowels xs = filter f xs where f x = not (x == ’a’ || x == ’e’ || x == ’i’ || x == ’o’ || x == ’u’)
但是我怎么能用递归函数做到这一点?
我尝试了类似的东西,但当然没有用(解析错误):
NoVowels :: String -> String
NoVowels "" = error "Empty String!!"
NoVowels (x:xs)
| x in (x == 'a'|| x == 'e' || x == 'i' || x == 'o' || x == 'u') = NoVowels (tail x)
如果head
是元音,那么我将其从字符串中删除并递归传递tail
,如果它不是元音,我怎么能在不删除它的情况下验证另一个字符串。
更新obs:我想返回没有元音的函数。
答案 0 :(得分:2)
我觉得定义一个函数isVowel :: Char->Bool
是有道理的,之后写下这样的东西:
noVowels :: String -> String
noVowels [] = []
noVowels (x:xs)
|isVowel x = noVowels xs
|otherwise = x : noVowels xs
如果您不想再定义一个功能,可以尝试下一个代码:
noVowels :: String ->String
noVowels [] = []
noVowels (x:xs)
|not( x `elem` "aeiou") = x: noVowels xs
|otherwise = noVowels xs
答案 1 :(得分:0)
这是对代码的一些改进。以防万一您错过了保存所涉及的案例。
module Disemvowel where
disemvowel :: String -> String
disemvowel [] = []
disemvowel " " = " "
disemvowel (x:xs)
| x `elem` "aeiouAEIOU" = disemvowel xs
| otherwise = [x] ++ disemvowel xs