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