我试图用一个句子来计算元音组.
我的第一次尝试是使用列表理解将句子减少为每个Char的布尔值列表,具体取决于它是否是元音.但是,我不确定如何计算列表中连续"True"值的组.这有什么诀窍吗?
它位于我的教科书的一章中,处理列表和列表理解,因此我觉得它与此有关.
由于我不知道这是否是作业,我将给你提示:
在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)
你应该能够自己做这些适应症的管道!
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |