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

Haskell实现4×5棋盘士兵斜向移动判断函数isDiagonal

判断棋盘士兵斜向移动的Haskell实现

要实现这个isDiagonal函数很简单,核心就是抓住斜向移动的本质:横向移动的距离和纵向移动的距离必须相等,而且得是真的有移动(不能原地踏步)。

首先定义函数的类型签名,我们用整数元组来表示坐标:

isDiagonal :: (Int, Int) -> (Int, Int) -> Bool

接下来是具体实现,用模式匹配拆解两个坐标的x、y值,计算位移的绝对值,然后判断条件:

isDiagonal (x1, y1) (x2, y2) = 
    let dx = abs (x2 - x1)
        dy = abs (y2 - y1)
    in dx == dy && dx /= 0

代码解释

  • dx = abs (x2 - x1):计算初始位置到目标位置的横向位移绝对值,不管是向左还是向右移动,都取正数。
  • dy = abs (y2 - y1):同理,计算纵向位移的绝对值。
  • dx == dy:这是斜向移动的核心条件——横纵移动的距离必须一致,不管是往哪个斜方向走(左上、右上、左下、右下都满足)。
  • dx /= 0:排除原地不动的情况,毕竟原地不算“移动”。

测试例子

  • 你提到的isDiagonal (1,1) (2,2)会返回True,符合预期。
  • isDiagonal (1,1) (3,3) → True(长距离斜向移动也满足)
  • isDiagonal (3,4) (1,2) → True(向左下移动)
  • isDiagonal (1,1) (2,3) → False(横向走1格,纵向走2格,距离不等)
  • isDiagonal (2,3) (2,3) → False(原地不动,不算移动)

如果你的场景里允许把原地不动也算作“斜向”(虽然逻辑上不太合理),只需要去掉&& dx /= 0这部分就行,改成dx == dy。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:28