Haskell遍历字符串的text函数报Non-exhaustive patterns异常如何解决?
错误原因
你定义的text函数仅匹配了非空字符串的模式(x:xs),缺少空字符串[]的匹配分支,这就是Non-exhaustive patterns报错的根源。
你代码里的守卫条件完全无效:只要成功匹配到(x:xs)模式,xs的长度最小为0,length xs >= 0的判断永远成立,otherwise分支永远不会被执行。当递归遍历到字符串末尾时,会调用text [],此时没有对应的匹配逻辑,就会抛出非穷尽模式异常。
修复代码
补充空字符串的匹配分支即可,冗余的守卫可以直接删除:
text :: String -> String text [] = "" text (x:xs) = (func x morse) ++ " " ++ text xs
如果你不需要结果末尾多出来的空格,可以再调整下非空单字符的分支逻辑:
text :: String -> String text [] = "" text [x] = func x morse text (x:xs) = (func x morse) ++ " " ++ text xs
内容的提问来源于stack exchange,提问作者Rezan Yilmaz
相关产品推荐
相关产品推荐

