【发布时间】:2014-05-11 22:59:20
【问题描述】:
我正在尝试过滤 haskell 中的元组列表。 我想返回第一个和第二个元素相同的元组。
我正在尝试这个
filter ((==fst).snd) [(1,2), (2,2), (3,3)]
但它不起作用。对此有什么想法吗?谢谢!
【问题讨论】:
标签: haskell
我正在尝试过滤 haskell 中的元组列表。 我想返回第一个和第二个元素相同的元组。
我正在尝试这个
filter ((==fst).snd) [(1,2), (2,2), (3,3)]
但它不起作用。对此有什么想法吗?谢谢!
【问题讨论】:
标签: haskell
你可以使用uncurry:
filter (uncurry (==)) [(1,2), (2,2), (3,3)]
或者你可以匹配每个元组:
filter (\(x,y) -> x == y) [(1,2), (2,2), (3,3)]
【讨论】:
Eq 实例的任何元组。在元组之前你需要一个\:filter (\(x, y) -> x == 'a'))。
filter (\(x, y) -> x == 'a') dictionary -- dictionary = [('a',"apple"),('b',"boy")] ,所以我想返回“apple”,而不是元组. p.s.
试试这个:
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)]
【讨论】: