我试图过滤haskell中的元组列表。 我想返回第一个和第二个元素相同的元组。
我正在尝试这个
filter ((==fst).snd) [(1,2), (2,2), (3,3)]
但它不起作用。有什么想法吗?谢谢!
答案 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)]