如何使用Haskell计算句子中的元音组

Ben*_*313 1 haskell

我试图用一个句子来计算元音组.

我的第一次尝试是使用列表理解将句子减少为每个Char的布尔值列表,具体取决于它是否是元音.但是,我不确定如何计算列表中连续"True"值的组.这有什么诀窍吗?

它位于我的教科书的一章中,处理列表和列表理解,因此我觉得它与此有关.

Pti*_*val 5

由于我不知道这是否是作业,我将给你提示:

在Data.List中:

group :: Eq a => [a] -> [[a]]
-- also interesting: groupBy :: (a -> a -> Bool) -> [a] -> [[a]]

-- for example:
-- group [True, True, False, False, False, True] =
-- [[True, True], [False, False, False], [True]]
Run Code Online (Sandbox Code Playgroud)

你可以写自己的:

isVowel :: Char -> Bool
Run Code Online (Sandbox Code Playgroud)

所以你应该能够获得你提到的列表,用Bools,现在你想要计算"全部为真"的组.

and :: [Bool] -> Bool
or :: [Bool] -> Bool
Run Code Online (Sandbox Code Playgroud)

这两个研究员中的任何一个都应该证明是有用的,因为两者都可以将所有相等的布尔值列表减少为等于它们的单个值.(编辑:正如评论中提到的,我在这里过度工作,你只需要取head每个"组".实际上,你也可以通过查看第一组是否是元音来猜测元音组的数量/辅音,并通过计算群组的数量,因为肯定有一个替代元音/辅音!)

而现在,你只需要计算True最终列表中的s,因为每个True代表一组元音!

filter :: (a -> Bool) -> [a] -> [a]
length :: [a] -> Int
Run Code Online (Sandbox Code Playgroud)

你应该能够自己做这些适应症的管道!