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
相关产品推荐
相关产品推荐

