Haskell:比较字符
Haskell: Comparing Characters
我想创建一个函数 consonant 来检查一个字符是辅音 (True) 还是元音 (False)。
我尝试这样的事情:
consonant :: Char -> Bool
consonant x = if (x == 'a'|'e'|'i'|'o'|'u'|' ') then False else True
但这不起作用,我认为这只是语法问题。
我希望有人能帮助我 :)
谢谢
表达式x == 'a'|'e'|'i'|'o'|'u'|' '
没有意义,竖线字符(|
)用于守卫,或者为一个数据类型定义多个数据构造函数。
用 (||) :: Bool -> Bool -> Bool
替换 |
也无济于事,因为 'e'
不是 Bool
。但是我们可以写几个条件:
consonant :: Char -> Bool
consonant x = not (x == 'a'<b>|| x ==</b> 'e'<b>|| x ==</b> 'i'<b>|| x ==</b>'o'<b>|| x ==</b>'u'<b>|| x ==</b>' ')
或者我们可以使用 elem :: (Eq a, Foldable f) => a -> f a -> Bool
:
consonant :: Char -> Bool
consonant = not . <b>flip elem "aeiou "</b>
或者我们可以使用运算符分段 :
consonant :: Char -> Bool
consonant = not . <b>(`elem` "aeiou ")</b>
或者"flipping"我们自己用一个变量:
consonant :: Char -> Bool
consonant <b>x</b> = not (elem <b>x</b> "aeiou ")
或者我们可以使用 notElem :: (Eq a, Foldable f) => a -> f a -> Bool
来否定 elem
:
consonant :: Char -> Bool
consonant = (<b>`notElem`</b> "aeiou ")
我想创建一个函数 consonant 来检查一个字符是辅音 (True) 还是元音 (False)。 我尝试这样的事情:
consonant :: Char -> Bool
consonant x = if (x == 'a'|'e'|'i'|'o'|'u'|' ') then False else True
但这不起作用,我认为这只是语法问题。 我希望有人能帮助我 :) 谢谢
表达式x == 'a'|'e'|'i'|'o'|'u'|' '
没有意义,竖线字符(|
)用于守卫,或者为一个数据类型定义多个数据构造函数。
用 (||) :: Bool -> Bool -> Bool
替换 |
也无济于事,因为 'e'
不是 Bool
。但是我们可以写几个条件:
consonant :: Char -> Bool
consonant x = not (x == 'a'<b>|| x ==</b> 'e'<b>|| x ==</b> 'i'<b>|| x ==</b>'o'<b>|| x ==</b>'u'<b>|| x ==</b>' ')
或者我们可以使用 elem :: (Eq a, Foldable f) => a -> f a -> Bool
:
consonant :: Char -> Bool
consonant = not . <b>flip elem "aeiou "</b>
或者我们可以使用运算符分段
consonant :: Char -> Bool
consonant = not . <b>(`elem` "aeiou ")</b>
或者"flipping"我们自己用一个变量:
consonant :: Char -> Bool
consonant <b>x</b> = not (elem <b>x</b> "aeiou ")
或者我们可以使用 notElem :: (Eq a, Foldable f) => a -> f a -> Bool
来否定 elem
:
consonant :: Char -> Bool
consonant = (<b>`notElem`</b> "aeiou ")