过滤haskell中的元组列表

Mat*_*tei 1 haskell

我正在尝试过滤haskell中的元组列表.我想返回第一个和第二个元素相同的元组.

我正在尝试这个

 filter ((==fst).snd) [(1,2), (2,2), (3,3)] 
Run Code Online (Sandbox Code Playgroud)

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

Lee*_*Lee 13

你可以使用uncurry:

filter (uncurry (==)) [(1,2), (2,2), (3,3)]
Run Code Online (Sandbox Code Playgroud)

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

filter (\(x,y) -> x == y) [(1,2), (2,2), (3,3)]
Run Code Online (Sandbox Code Playgroud)


Lee*_*hem 8

试试这个:

filter (\p -> fst p == snd p) [(1,2), (2,2), (3,3)]
Run Code Online (Sandbox Code Playgroud)

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

filter ((==) <$> fst <*> snd) [(1,2), (2,2), (3,3)]
Run Code Online (Sandbox Code Playgroud)