You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell统计String中Char出现次数时模式匹配报错如何解决?

问题原因

Haskell 语法不允许模式匹配中重复使用同一个变量名(即不支持非线性模式),你代码中第二行howMany a (a : xs)里两次出现的a会被判定为重复定义变量,直接触发编译报错,无法通过重名变量隐式判断两个值是否相等。

修复方案

你需要显式对列表首元素和目标字符做相等性判断,可以用守卫语法简化逻辑,修改后的代码如下:

howMany :: Char -> String -> Int
howMany a [] = 0
howMany a (x : xs)
  | x == a = 1 + howMany a xs
  | otherwise = howMany a xs

也可以用条件表达式实现相同逻辑:

howMany :: Char -> String -> Int
howMany a [] = 0
howMany a (x : xs) = (if x == a then 1 else 0) + howMany a xs

两种写法逻辑完全一致:遇到空字符串直接返回0,非空时先判断首字符是否是目标字符,匹配则计数加1,否则不加,再递归统计剩余字符串的字符出现次数。

内容的提问来源于stack exchange,提问作者123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:45:03