Haskell修改myTail处理空列表却触发Non-exhaustive patterns异常问题
问题原因与解决方法
你的代码逻辑本身是正确的,问题出在GHCi交互环境的函数定义方式上:
在GHCi中,如果分两次输入函数的不同模式(比如先输myTail [] = [],再输myTail (_:xs) = xs),第二次的定义会完全替换掉第一次的,而不是把两个模式合并成完整的函数。最终你的myTail实际上只有后输入的那个模式,自然会出现非穷尽模式的错误。
解决办法
有两种方式可以在GHCi中正确定义多模式函数:
- 使用
:{和:}包裹所有模式,一次性输入:ghci> :{ ghci| myTail [] = [] ghci| myTail (_:xs) = xs ghci| :} - 在同一行用分号分隔多个模式:
ghci> myTail [] = []; myTail (_:xs) = xs
另外,更稳妥的方式是把函数代码写到一个.hs文件中,再通过:load命令加载到GHCi,这样多行的模式匹配会被正确识别。
内容的提问来源于stack exchange,提问作者pid
相关产品推荐
相关产品推荐

