如何过滤最小的haskell

时间:2013-03-30 13:39:55

标签: list haskell

现在我已经有了一个函数,它取了元组列表中第一个元素的最小值,例如;

mymin [(3,4),(3,2),(4,3)] = 3

通过使用这个函数,我想把所有以3作为第一个元素的元组。我试图过滤掉第一个元素上有3个但是

的那个
filter (\a -> mymin (x:xs) == fst x) (x:xs)

给出了

[(3,4),(3,2),(4,3)]

再次因为每次切割列表时,它再次找到mymin,但我只想采用

[(3,4),(3,2)]

部分,我应该遵循什么样的轨道,我卡住了。谢谢你的帮助。

2 个答案:

答案 0 :(得分:8)

为什么不使用letwhere在过滤之前预先计算最小值?

yourFilter list = 
  let m = yourMin list
  in filter (\(a, _) -> a == m) list

或者,使用无点样式lambda:

yourFilter list = 
  let m = yourMin list
  in filter ((== m) . fst) list

答案 1 :(得分:1)

您只需将x替换为

中的a
  

过滤器(\ a - > mymin(x:xs)== fst x)(x:xs)

(fst a 而不是fst x