第一次发帖,如果有什么地方做错了或者不清楚我的问题,请见谅
我对 Haskell 还很陌生,我很难弄清楚如何操纵列表理解来向我展示我想要的东西。我有两个函数可以给我元组列表(它们基本上是矩阵,其中一个是完整的,另一个是随机的)
我想使用列表理解创建一个新列表(矩阵),它将返回 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]
即使在 List1 中找到相同的元组,列表推导式仍会继续比较 List2 中的元组。
这就是我编写列表理解的方式:
[ (x==y) | x <- (list2), y <- (list1)]
我很确定必须有某种谓词可以在列表理解中编写以获得我想要的东西,但我不知道如何实现这一点。
最佳答案
这是电子成员(member)资格检查,因此您可以将其实现为:
[ x `elem` list2 | x <- list1 ]
但更简单的方法可能是使用 map :: (a -> b) -> [a] -> [b]
:
map (`elem` list2) list1
关于haskell - 我如何操纵列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72381873/