Haskell 如何从列表中删除某些坐标

Haskell 如何从列表中删除某些坐标,haskell,Haskell,我是Haskell的新手,我试图创建一个网格函数,它以列表的形式返回网格中的所有坐标。我想过滤此列表以删除x=y给定的[(x,y)]中的任何坐标(基本上去除网格中的所有对角线坐标),但我不确定如何做。如有任何帮助/建议,将不胜感激 grid :: Int -> [(Int,Int)] grid n = [(x,y) | x <- [0..n], y <- [0..n]] grid::Int->[(Int,Int)] 网格n=[(x,y)| x您应该使用过滤器 对于非对角元素,

我是Haskell的新手,我试图创建一个网格函数,它以列表的形式返回网格中的所有坐标。我想过滤此列表以删除
x=y
给定的
[(x,y)]
中的任何坐标(基本上去除网格中的所有对角线坐标),但我不确定如何做。如有任何帮助/建议,将不胜感激

grid :: Int -> [(Int,Int)]
grid n = [(x,y) | x <- [0..n], y <- [0..n]]
grid::Int->[(Int,Int)]
网格n=[(x,y)| x您应该使用过滤器

对于非对角元素,以下谓词为
True

 predicate (x,y)=x/=y
然后您可以定义过滤器:

gridFilter g=filter predicate g
使用以下命令运行它:

gridFilter $ grid 2
收益率:

[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)]
当然,您也可以将其制作为一行:

gridFiltered=filter (\(x,y)->x/=y) $ grid 2

您的功能足够好,只需在其上添加一个过滤器:

grid :: Int -> [(Int,Int)]
grid n = [(x,y) | x <- [0..n], y <- [0..n], x /= y]
grid::Int->[(Int,Int)]

网格n=[(x,y)| x@Daniel的答案要简单得多,如果他已经有了一个列表,那么imhoHaskell使用的是
/=
,而不是像大多数语言一样使用
!=
(我不知道为什么Haskell在这里不复制C,例如
&&
|
=
)@chi,没错,我错过了,谢谢你帮我修好。