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

Haskell中case of结合sort实现三角形判定的逻辑疑问

两种isTriangle实现的等价性说明

两种写法逻辑完全一致,基于sort+case of的实现是利用排序后的大小特性,简化了冗余的条件判断。

原理推导

调用Data.List.sort对三个边长排序后,得到的是从小到大排列的三元素列表,通过case of模式匹配绑定的三个变量满足 min ≤ middle ≤ max。
三角形构成需要的三个判断条件中,有两个是必然成立的:

  • min + max > middle:max本身就大于等于middle,加上正整数min后肯定大于middle
  • middle + max > min:两个不小于min的正整数相加,结果必然大于min
    唯一需要校验的只有min + middle > max这一个条件,只要该条件成立,另外两个条件自动满足,等价于你写的三个判断逻辑做与运算。

case of的作用

这里的case of只是做常规的列表模式匹配:

import Data.List (sort)

isTriangle :: Int -> Int -> Int -> Bool
isTriangle a b c =
  case sort [a,b,c] of
     [min, middle, max] -> (min + middle) > max

因为输入固定是三个边长,排序后的列表永远是三元素结构,所以模式匹配不会失败,直接把排序后的三个值绑定到对应变量后做判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:06:04