过滤功能的无点



是否存在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 = ??

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

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

不同的实现

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

首先按组排序,然后选择第一个子列表。也许您可能需要明确处理空列表。

将这对放入Arg中,您可以在第一个元素上订购,您可以按以下方式利用:

import Data.Semigroup (Arg(..))
import Data.Ord (comparing)
findMinimum :: Ord a => [(a, b)] -> (a, b)
findMinimum = minimumBy (comparing (uncurry Arg))

相关内容

  • 没有找到相关文章

最新更新