我是Haskell的新手,嘗試製作一個網格函數,它將網格中的所有座標作爲列表返回。我想過濾這個列表來刪除任何座標,其中x = y
給定爲[(x,y)]
(實質上是擺脫網格中的所有對角線座標),但我不知道如何去做。任何幫助/指針將不勝感激。如何從列表中刪除某些座標
grid :: Int -> [(Int,Int)]
grid n = [(x,y) | x <- [0..n], y <- [0..n]]
我是Haskell的新手,嘗試製作一個網格函數,它將網格中的所有座標作爲列表返回。我想過濾這個列表來刪除任何座標,其中x = y
給定爲[(x,y)]
(實質上是擺脫網格中的所有對角線座標),但我不知道如何去做。任何幫助/指針將不勝感激。如何從列表中刪除某些座標
grid :: Int -> [(Int,Int)]
grid n = [(x,y) | x <- [0..n], y <- [0..n]]
您應該使用過濾器。
下斷言是True
非對角線元素:
predicate (x,y)=x/=y
然後你可以定義過濾器:
gridFilter $ grid 2
產量:
gridFilter g=filter predicate g
與運行它
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)]
當然,你也可以把它一個班輪:使用過濾器(x /= y
)
grid :: Int -> [(Int,Int)]
grid n = [(x,y) | x <- [0..n], y <- [0..n], x /= y]
:
gridFiltered=filter (\(x,y)->x/=y) $ grid 2
@丹尼爾的答案是更簡單,如果他已經有一個列表理解imho –