Haskell检查棋盘对角线运动是否正确

Haskell检查棋盘对角线运动是否正确,haskell,Haskell,我想写一个4x5棋盘的棋盘游戏函数,我想做一个简单的真假布尔函数,说明基于x,y坐标的运动是否是对角的。我想放4个坐标2x和2y。例如,如果我想放置(1,1)和(2,2),是否应该使用&&函数 如果要检查点(x,y)是否与Haskell中的点(x',y')位于同一对角线上,最好从类型开始 isDiagonal :: (Int, Int) -> (Int, Int) -> Bool 虽然在技术上是可选的,但是给每个顶级函数一个显式类型是一个很好的实践 现在,我们需要一个函数体 isD

我想写一个4x5棋盘的棋盘游戏函数,我想做一个简单的真假布尔函数,说明基于x,y坐标的运动是否是对角的。我想放4个坐标2x和2y。例如,如果我想放置(1,1)和(2,2),是否应该使用&&函数


如果要检查点
(x,y)
是否与Haskell中的点
(x',y')
位于同一对角线上,最好从类型开始

isDiagonal :: (Int, Int) -> (Int, Int) -> Bool
虽然在技术上是可选的,但是给每个顶级函数一个显式类型是一个很好的实践

现在,我们需要一个函数体

isDiagonal (x, y) (x', y') = ...
如果它们位于同一对角线上,则
x
x'
之间的距离必须与
y
y'
之间的距离一样远。因此,我们可以检查差异是否相等。i、 e

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-1)

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

这是不清楚的。上面的代码毫无意义,我无法理解任务的描述。我建议您开始编写函数的类型。输入类型是什么?(只有一个参数
x
?关于
y
?)返回类型是什么?(
Bool
?)说一个“简单的真假Bool函数”并不能说明什么。也许你想要
isdiagonalxy=x==y
,但这很难说。再次重申:在你决定它的类型之前,不要写任何东西。无论如何,我不同意@chi:我很清楚你想写什么函数。但问题的其余部分无论如何都很糟糕:StackOverflow既不是代码编写服务,也不是教程推荐服务(所以我投票认为“太广泛了”)。谷歌可以为你找到一个教程;一点铅笔和纸的工作可以帮助你制定一个算法。一旦你有了这些东西,你就可以尝试写一些代码,然后如果你的代码不能按照你想要的方式工作,你可能会有一个针对性更强的主题问题出现在这个网站上。@DanielWagner我没有投票关闭(即使我考虑过),因为我认为这可能是一个小任务。现在,看到下面的答案,重新阅读这个问题,我终于明白了它是关于什么的。
isDiagonal :: (Int, Int) -> (Int, Int) -> Bool
isDiagonal (x, y) (x', y') = abs (x - x') == abs (y - y')
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')