过滤haskell中的元组列表

时间:2014-05-11 14:42:48

标签: haskell

我试图过滤haskell中的元组列表。 我想返回第一个和第二个元素相同的元组。

我正在尝试这个

 filter ((==fst).snd) [(1,2), (2,2), (3,3)] 

但它不起作用。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:12)

您可以使用uncurry

filter (uncurry (==)) [(1,2), (2,2), (3,3)]

或者你可以匹配每个元组:

filter (\(x,y) -> x == y) [(1,2), (2,2), (3,3)]

答案 1 :(得分:8)

试试这个:

filter (\p -> fst p == snd p) [(1,2), (2,2), (3,3)]

(==fst).snd表示\p -> snd p == fst,显然这不起作用。如果你真的不想使用lambda抽象,并且想要一个没有意义的版本,这里有一种实现方法(你需要先导入Control.Applicative):

filter ((==) <$> fst <*> snd) [(1,2), (2,2), (3,3)]