现在我已经有了一个函数,它取了元组第一个元素列表的最小值,例如;
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)
部分,我应该遵循什么样的轨道,我卡住了.谢谢你的帮助.
为什么不在基于它的过滤之前使用let或where预先计算最小值?
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)