Haskell检查棋盘对角线移动是真还是假

时间:2018-04-17 14:49:17

标签: haskell

我正在尝试编写一个4x5板的棋盘游戏功能,我想做一个简单的真假Bool函数,说明基于x,y坐标的运动是否是对角线。我想放4个坐标2 x和2 y。我应该使用&&函数,例如我想把(1,1)和(2,2)?

 isDiagonal x  
 if x == 1 && y == 1 then True
 else False
 isDiagonal x
 if x == 2 && y == 2 then True 
 else False

1 个答案:

答案 0 :(得分:1)

如果你想检查点(x,y)是否与Haskell中的点(x',y')在同一对角线上,一个好的起点就是一个类型。

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

虽然技术上是可选的,但为每个顶级功能提供一个明确的类型是一种很好的做法。

现在,我们需要一个这个功能的主体。

isDiagonal (x, y) (x', y') = ...

如果他们位于相同的对角线上,则xx'必须与yy'相距甚远。所以我们可以检查差异是否相等。即

abs (x - x') == abs (y - y')

总而言之,我们(希望)达到了预期的功能

isDiagonal :: (Int, Int) -> (Int, Int) -> Bool
isDiagonal (x, y) (x', y') = abs (x - x') == abs (y - y')

根本不需要&&。但是我们可以使用它,例如我们想要施加一个额外的条件,就像新的点必须在4x5板上(假设1索引)

isDiagonal :: (Int, Int) -> (Int, Int) -> Bool
isDiagonal (x, y) (x', y') = x' >= 1 && x' <= 4 && 
                             y' >= 1 && y' <= 5 &&
                             abs (x - x') == abs (y - y')