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

Haskell中(String, Int)元组比较为何仅判断Int值的疑问

关于Haskell元组比较规则的解释

核心原理:Haskell的元组比较逻辑

Haskell里的元组比较是按元素顺序逐位进行的短路比较:

  • 先比较两个元组的第一个元素,如果不相等,直接根据第一个元素的比较结果返回整体的比较结果,后面的元素不会被比较;
  • 只有当第一个元素相等时,才会继续比较第二个元素,以此类推。

你的代码为什么不受String部分影响

在你的代码里,比较的是(course, mark)和(course, 50):

  • 两个元组的第一个元素都是同一个变量course,所以它们的String值必然完全相等;
  • 因为第一个元素相等,Haskell会继续比较第二个元素,也就是mark和50的大小,最终的比较结果完全由这两个Int值决定,String部分因为两边完全一致,所以不会对结果产生任何影响。

优化建议

这种通过元组比较的写法虽然能工作,但可读性较差,完全可以直接比较Int值,代码更清晰:

check :: (String, Int) -> Grade
check (course, mark) 
    | mark < 50 = Fail
    | otherwise = Pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:40:31