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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:10:27