4

是否存在用于filter在列表中查找对的第一个元素的最小值的函数的无点函数?例如:

findMinimum xs =  filter ((== minimum (map fst xs)) . fst ) xs

-- example:
findMinimum [(0, 0), (0, 1), (2, 2), (3, 2), (1, 4)] = [(0, 0), (0, 1)]

如何将findMinimum函数转换为无点:

findMinimum = ??
4

3 回答 3

6

pointfree.io输出这个,这还不错。不过,我仍然更喜欢原始代码。

findMinimum = filter =<< (. fst) . (==) . minimum . map fst
于 2018-12-19T18:54:51.010 回答
4

不同的实现

head . groupBy ((==) `on` fst) . sortOn fst

首先排序和分组,选择第一个子列表。也许您可能想明确处理空列表。

于 2018-12-19T20:43:28.677 回答
2

将这对放入 中Arg,您可以对第一个元素进行排序,您可以按如下方式利用它:

import Data.Semigroup (Arg(..))
import Data.Ord (comparing)

findMinimum :: Ord a => [(a, b)] -> (a, b)
findMinimum = minimumBy (comparing (uncurry Arg))
于 2018-12-20T04:22:34.960 回答