我怎么能操纵列表理解?

How could i manipulate a list comprehension?

第一次发帖,如有不妥或不清楚的地方请见谅

我是 Haskell 的新手,我很难弄清楚如何操纵列表理解来显示我想要的内容。我有两个函数可以给我元组列表(它们基本上是矩阵,一个是完整的,另一个是随机的)

我想用列表推导创建一个新列表(矩阵),它将 return list2 元组是否与 list1 元组相同。

例如:

list1 = [(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
list2 = [(1,0),(1,1)]
result = [False, False, False, True, True, False, False, False, False]

但是我写的列表理解给了我一个笛卡尔积

[False,False,False,True,False,False,False,False,False,False,False,False,False,True,False,False,False,False]

列表理解会继续比较 List2 中的元组,即使它已在 List1 中找到相同的元组。

这就是我写列表理解的方式:

[ (x==y) | x <- (list2), y <- (list1)]

我很确定一定有某种谓词可以写在列表理解中以获得我想要的东西,但我不知道如何实现它。

这是电子成员资格检查,因此您可以将其实现为:

[ x `elem` list2 | x <- list1 ]

但更简单的方法可能是使用 map :: (a -> b) -> [a] -> [b]:

map (`elem` list2) list1