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

Haskell中如何处理无匹配牌型的Hand?value函数otherwise=0可行吗?

Haskell中value :: Hand -> Int函数的实现疑问解答

首先纠正你代码里的语法问题,Haskell的函数模式匹配需要明确匹配数据构造器,正确的基础结构应该是这样:

data Hand = PairOf Rank | ThreeOf1 Rank | ThreeOf2 Suit

value :: Hand -> Int
value (PairOf r) = -- 在这里实现对子手牌的数值计算逻辑
value (ThreeOf1 r) = -- 在这里实现按Rank定义的三条的数值计算逻辑
value (ThreeOf2 s) = -- 在这里实现按Suit定义的三条的数值计算逻辑
value _ = 0

关于“不属于三种构造器的手牌”的说明

你定义的Hand是代数数据类型(ADT),它的所有可能取值就是你列出的PairOf、ThreeOf1、ThreeOf2这三种构造器对应的实例,不存在“不属于这三者的手牌组合”——ADT的取值范围完全由你声明的构造器决定,没有额外的默认情况。

关于otherwise = 0的合理性

你当前写的otherwise = 0语法不对,但如果是想用一个默认分支覆盖所有未明确匹配的情况,用通配符_ = 0是可行的:

  • 如果你后续给Hand类型新增构造器,这个默认分支能避免函数出现“非穷尽模式匹配”的编译警告,确保函数始终能返回值;
  • 注意otherwise本质是True的别名,一般用于条件判断分支(比如if ... otherwise ...或者case里的条件模式),在模式匹配的函数分支里,用通配符_才是标准写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:15:55