Haskell 根据两个条件筛选元组列表

Haskell 根据两个条件筛选元组列表,haskell,Haskell,我有一个元组列表,如下所示: let tups = [("AA","BB",1), ("AA","CC",2), ("AA","BB",3), ("VV","RR",4), ("XX","TT",5), ("BB","BB",6)] 我只想过滤出第一个元素是AA,第二个元素是BB的元组。我试图使用: filter (\(x,y,_) -> x /= "AA" &

我有一个元组列表,如下所示:

let tups = [("AA","BB",1),
            ("AA","CC",2),
            ("AA","BB",3),
            ("VV","RR",4),
            ("XX","TT",5),
            ("BB","BB",6)]
我只想过滤出第一个元素是AA,第二个元素是BB的元组。我试图使用:

filter (\(x,y,_) -> x /= "AA" && y /= "BB") tups
上面的命令删除第一个元素是AA或第二个元素是BB的任何元组。因此,输出为:

[("VV","RR",4), ("XX","TT",5)]
如果第一个元素是AA,第二个元素是BB,如何创建一个只删除元组的过滤函数?正确的输出应为:

[("AA","CC",2), ("VV","RR",4), ("XX","TT",5), ("BB","BB",6)]
会做你想让它做的事。您正在混合&&和| |运算符。筛选器将获取谓词为true的所有内容,因此将返回不包含AA的所有内容,并返回y不是BB的所有内容


会做你想让它做的事。您正在混合&&和| |运算符。筛选器将获取谓词为true的所有内容,因此将返回不包含AA的所有内容,并返回y不是BB的所有内容。

布尔代数。要删除的对象满足条件

x == "AA" && y == "BB"
布尔代数表明

¬(x and y) = ¬x or ¬y
因此,lambda的条件应为

x /= "AA" || y /= "BB"

因为过滤器保留所提供谓词返回True的所有内容。

布尔代数。要删除的对象满足条件

x == "AA" && y == "BB"
布尔代数表明

¬(x and y) = ¬x or ¬y
因此,lambda的条件应为

x /= "AA" || y /= "BB"

因为filter保留了提供的谓词返回True的所有内容。

正如您在文档中看到的,它返回满足谓词的元素列表。这意味着您的谓词必须仅为要保留的元素返回True

因此,通过重新表述您的请求,我们希望保留所有第一个元素不同于AA或第二个元素不同于BB的三元组:

filter (\(x,y,_)-> x /= "AA" || y /= "BB" ) tups

正如您在文档中看到的,返回满足谓词的那些元素的列表。这意味着您的谓词必须仅为要保留的元素返回True

因此,通过重新表述您的请求,我们希望保留所有第一个元素不同于AA或第二个元素不同于BB的三元组:

filter (\(x,y,_)-> x /= "AA" || y /= "BB" ) tups

如果您想让您的意图更加清晰,请尝试:

filter (\(x,y,_) -> not $ x == "AA" && y == "BB") tups

如果您想让您的意图更加清晰,请尝试:

filter (\(x,y,_) -> not $ x == "AA" && y == "BB") tups

回答得好!但是我如何使用我的函数得到的谓词作为参数呢?答案很好!但是我如何使用我的函数得到的谓词作为参数呢?