如何用递归与模式匹配实现Haskell的countA函数统计a/A字符数
Haskell
countA 函数实现方案 需求说明
实现类型为countA :: [Char] -> Int的Haskell函数,统计输入字符串中a和A两类字符的出现总次数。
约束要求
- 仅允许使用递归和模式匹配实现,不得使用任何导入的外部函数
- 不可使用
if-then-else语句实现
核心语法说明
针对你不熟悉的列表模式匹配用法,核心规则如下:
- 空列表可直接用
[]匹配 - 非空列表可以用
(首元素:剩余元素列表)的结构匹配,比如字符串"abc"可以匹配为('a':"bc")
完整实现代码
countA :: [Char] -> Int countA [] = 0 countA ('a':rest) = 1 + countA rest countA ('A':rest) = 1 + countA rest countA (_:rest) = countA rest
实现逻辑说明
- 第一个分支匹配空列表:空字符串中没有任何字符,
a/A的计数为0,作为递归终止条件 - 第二个分支匹配首字符为小写
a的情况:当前字符符合计数要求,总计数为1加上剩余字符串的统计结果 - 第三个分支匹配首字符为大写
A的情况:逻辑和小写a分支一致 - 第四个分支用通配符
_匹配所有其他字符:当前字符不符合要求,总计数直接等于剩余字符串的统计结果
示例验证
运行题目给出的测试用例,结果符合预期:
countA "Appleapplet"返回值为2,满足countA "Appleapplet" == 2countA "Nietzsche"返回值为0,满足countA "Nietzsche" == 0
内容的提问来源于stack exchange,提问作者BeanieBarrow
相关产品推荐
相关产品推荐

