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

Haskell列表回文计数时的类型匹配错误求助

解决Haskell回文计数的类型匹配错误

嘿,我一眼就瞅出你代码里的问题啦!

你遇到的[Char]与String -> Bool不匹配的错误,根源在countPalindromes函数里的filter调用:

filter (== isPalindrome) ss

这里的问题很清晰:

  • filter需要的参数是一个判断元素是否符合条件的函数(类型为a -> Bool),用来逐个检查列表里的元素
  • 但你写的(== isPalindrome)是在做“相等比较”——它试图把列表里的每个String(也就是[Char])和isPalindrome这个函数(类型是String -> Bool)比大小,这俩类型完全不搭,自然会触发类型匹配错误。

修正后的代码

你只需要把filter的参数直接换成isPalindrome就行,因为它本身就是一个String -> Bool的函数,正好符合filter的要求:

isPalindrome :: String -> Bool
isPalindrome w = w == reverse w

countPalindromes :: [String] -> Int
countPalindromes ss = length (filter isPalindrome ss)

补充说明

filter isPalindrome ss会遍历列表ss里的每个字符串,把它传给isPalindrome函数,留下所有返回True的回文字符串,最后用length统计这些符合条件的元素数量,完全契合你的需求。

如果想写得更简洁,还可以用函数组合的方式简化代码:

countPalindromes = length . filter isPalindrome

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:56