2012-03-28 105 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