如何过滤最小的haskell

Kar*_*ana 0 haskell list

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

mymin [(3,4),(3,2),(4,3)] = 3
Run Code Online (Sandbox Code Playgroud)

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

filter (\a -> mymin (x:xs) == fst x) (x:xs)
Run Code Online (Sandbox Code Playgroud)

这使

[(3,4),(3,2),(4,3)]
Run Code Online (Sandbox Code Playgroud)

再次,因为每次它削减列表,它再次找到mymin,但我只是想采取

[(3,4),(3,2)]
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*kov 8

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

yourFilter list = 
  let m = yourMin list
  in filter (\(a, _) -> a == m) list
Run Code Online (Sandbox Code Playgroud)

或者,使用无点样式lambda:

yourFilter list = 
  let m = yourMin list
  in filter ((== m) . fst) list
Run Code Online (Sandbox Code Playgroud)