2012-03-28 106 views
0

我想写一个函数,它将查看两个单元格的坐标并返回一个布尔响应,如果它们相邻或不相邻。查找haskell中的邻居单元

我想,正因为如此:

data Coord = Coord {xCoord, yCoord :: Integer} 
deriving (Ord, Eq, Show, Read) 

我的功能需要采取两个整数,然后(这是我需要帮助的部分)检查,他们是邻居。我写的所有内容都会中断,因为它还允许两个不相邻的单元格返回true。

请帮忙。 =]

+1

我想你的意思是说'我的功能需要两个_coordinates_',对吧? – 2012-03-28 12:07:44

+0

是的,它需要看两个坐标。但是他们被表达为整数,对吗? – GnomeaD 2012-03-28 12:11:34

+0

你问题中的代码表明它们被表示为'Coord',它具有'Integer'的x和y值。 (另外,你应该发布已经存在的代码(编辑它到问题中),它可以让人们更有效地帮助你:) – huon 2012-03-28 12:22:22

回答

1

我猜两个坐标在你的意义上是相邻的,如果它们不相等,并且它们之间的Y方向上的距离至多是一个?如果是这样,你可以使用

adjacent :: Coord -> Coord -> Bool 
adjacent p q | p == q = False 
adjacent (Coord x1 y1) (Coord x2 y2) = abs (x1 - x2) <= 1 && abs (y1 - y2) <= 1 
+1

对相邻的另一个常见解释是'x'和'y'中的一个相等,另一个相差1。这将导致abs(x1-x2)+ abs(y1-y2)== 1',使得平等检查不必要。 – 2012-03-28 12:24:47

+0

@DanielFischer:是的,没错。我想你应该做出单独的答案。我不知道OP的实际解释,所以你的方式可能比我建议的更合适。 – 2012-03-28 12:41:52

+0

不值得一个单独的答案。将它添加到你的,并让OP选择符合他/她的标准。 – 2012-03-28 12:43:48