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
回答得好!但是我如何使用我的函数得到的谓词作为参数呢?答案很好!但是我如何使用我的函数得到的谓词作为参数呢?