0

我有一个问题,我试图过滤(删除)一个列表中包含在另一个列表中的元素。两个列表都包含元组。我对如何做到这一点的想法如下:

map solutions.filter (\(x,y) -> (x,y) notElem) forced --Trying to remove elements from solutions that are also in forced.

如果这是一个愚蠢的问题,我很抱歉。我只是在学习haskell,并且还在用我的大脑来处理列表过滤器。

编辑:我突然想到,实际上,我正在尝试删除(x,*) and (*,y)强制列表中除 (x,y) 对之外的所有内容

示例:强制 = [(A,1)] 解决方案 = [(A,1),(A,2),(A,3),(B,1),(B,2),(B,3)]我要创建的是一个新列表,它删除所有元组,其中 1 被分配给 A 以外的任务或 A 被分配给 1 以外的任务。所以结果看起来像 [(A,1), (B,2),(B,3)]

4

1 回答 1

2

Data.List 有运算(\\)

import Data.List ((\\))

a = [5, 6, 7, 8, 2, 1, 4]
b = [7, 2, 4]
a \\ b -- [5, 6, 8, 1]

对于你的 tuple 事情,我想你可以这样做:

[(a, b) | (a, b) <- solutions, not $ any (\(c, d) -> (a == c && b /= d) || (a /= c && b == d)) forced]
于 2013-10-30T00:47:19.427 回答