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

Haskell元组函数触发Non-exhaustive patterns异常原因排查

存在问题的原代码

regiuleishon :: (Bool, Integer) -> Integer
regiuleishon (True, _) = 0
reguleishon (False, x) | x >= 0 = 1
                       | otherwise = -1

运行时抛出异常:

Exception: pruebas.hs:13:1-26: Non-exhaustive patterns in function regiuleishon

实际测试现象:传入(True, 2)可正常返回结果0,但传入参数(False, 200)时就会触发上述异常。

错误根因

问题出在函数名拼写不一致:

  • 类型签名、处理(True, _)分支的函数名是regiuleishon(g后带字母i)
  • 处理(False, x)分支的函数名误拼为reguleishon(g后直接接u,漏写了i)

Haskell中标识符拼写不同就代表完全独立的不同函数,所以你实际定义的regiuleishon函数只实现了入参第一个元素为True的匹配逻辑,根本没有定义第一个元素为False的处理分支。你写的第二个分支本质是给另一个完全无关的reguleishon函数做的定义,根本不会被regiuleishon调用到,所以传入(False, 200)时找不到可匹配的模式,直接抛出非穷尽模式的异常。

修正方案

把第二个分支的函数名拼写改对,和类型签名保持一致即可:

regiuleishon :: (Bool, Integer) -> Integer
regiuleishon (True, _) = 0
regiuleishon (False, x) | x >= 0 = 1
                        | otherwise = -1

修正后所有入参都能正常返回结果:

  • regiuleishon (True, 2) 返回0
  • regiuleishon (False, 200) 返回1
  • regiuleishon (False, -5) 返回-1

内容的提问来源于stack exchange,提问作者Pacorum78654

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:15:30