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 ")