我想寫一個函數,它將查看兩個單元格的座標並返回一個布爾響應,如果它們相鄰或不相鄰。查找haskell中的鄰居單元
我想,正因爲如此:
data Coord = Coord {xCoord, yCoord :: Integer}
deriving (Ord, Eq, Show, Read)
我的功能需要採取兩個整數,然後(這是我需要幫助的部分)檢查,他們是鄰居。我寫的所有內容都會中斷,因爲它還允許兩個不相鄰的單元格返回true。
請幫忙。 =]
我想寫一個函數,它將查看兩個單元格的座標並返回一個布爾響應,如果它們相鄰或不相鄰。查找haskell中的鄰居單元
我想,正因爲如此:
data Coord = Coord {xCoord, yCoord :: Integer}
deriving (Ord, Eq, Show, Read)
我的功能需要採取兩個整數,然後(這是我需要幫助的部分)檢查,他們是鄰居。我寫的所有內容都會中斷,因爲它還允許兩個不相鄰的單元格返回true。
請幫忙。 =]
我猜兩個座標在你的意義上是相鄰的,如果它們不相等,並且它們之間的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
對相鄰的另一個常見解釋是'x'和'y'中的一個相等,另一個相差1。這將導致abs(x1-x2)+ abs(y1-y2)== 1',使得平等檢查不必要。 – 2012-03-28 12:24:47
@DanielFischer:是的,沒錯。我想你應該做出單獨的答案。我不知道OP的實際解釋,所以你的方式可能比我建議的更合適。 – 2012-03-28 12:41:52
不值得一個單獨的答案。將它添加到你的,並讓OP選擇符合他/她的標準。 – 2012-03-28 12:43:48
我想你的意思是說'我的功能需要兩個_coordinates_',對吧? – 2012-03-28 12:07:44
是的,它需要看兩個座標。但是他們被表達爲整數,對嗎? – GnomeaD 2012-03-28 12:11:34
你問題中的代碼表明它們被表示爲'Coord',它具有'Integer'的x和y值。 (另外,你應該發佈已經存在的代碼(編輯它到問題中),它可以讓人們更有效地幫助你:) – huon 2012-03-28 12:22:22