Бессмысленно для функции фильтра - PullRequest
0 голосов
/ 19 декабря 2018

Существует ли функция без точек для функции 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 = ??

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

другая реализация

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

сортировка и группировка по первым, выберите первый подсписок.Возможно, вы захотите явно обработать пустой список.

0 голосов
/ 20 декабря 2018

Помещая пару в Arg, вы получаете заказ на первый элемент, который вы можете использовать следующим образом:

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

findMinimum :: Ord a => [(a, b)] -> (a, b)
findMinimum = minimumBy (comparing (uncurry Arg))
0 голосов
/ 19 декабря 2018

pointfree.io выводит это, что не так уж плохо.Я все еще предпочитаю оригинальный код, хотя.

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