Haskell实现palindrome函数遇问题,求排查类型签名错误
问题分析与修复
你的代码类型签名没有错误,真正的问题出在palindrome函数的逻辑里:你试图将字符串str和函数revstring直接比较,这会导致类型不匹配——str是String类型,而revstring是String -> String类型,两者无法进行相等判断。
修复后的代码
方法1:修正函数调用
只需要在比较时传入参数调用revstring函数即可:
import Data.List palindrome :: String -> Bool palindrome str | str == revstring str = True | otherwise = False revstring :: String -> String revstring str = reverse str
方法2:简化代码(无需自定义revstring)
既然Data.List的reverse函数已经实现了字符串反转功能,完全可以直接使用,省去自定义的revstring:
import Data.List palindrome :: String -> Bool palindrome str = str == reverse str
或者更简洁的写法(利用String本质是[Char],reverse对列表原生支持,甚至可以不用导入Data.List):
palindrome :: String -> Bool palindrome str = str == reverse str
内容的提问来源于stack exchange,提问作者piggii
相关产品推荐
相关产品推荐

