Выбор данных из списка кортежей в Haskell

У меня есть список кортежей кортежей типа :: [((a, b), (a, b), (a, b))], в Haskell.

Для некоторого контекста, 3 точек (a, b) представьте (время, значение) пара на U сформированная кривая с первой точкой, в начальное время t1 наличие максимального значения на кривой x1, третьей точкой с большим временем t3=t1+dt и значение x3

Я хотел бы, находят диапазон для самого широкого U в списке [((t1, x1), (t2, x2), (t3, x3))] путем взятия кортежа с максимумом t3 - t1, и затем возвращение значения x2 - x1.

Единственным путем я могу думать, чтобы сделать это, должен сначала отобразить каждый кортеж в списке к t3 - t1, найдите его индекс, затем вычислите x2 - x1 для того индекса в исходном списке. Существует ли более изящный способ сделать это?

findMaxTime :: [((a, b), (a, b), (a, b))] -> Int
findMaxTime list = elemIndex (==min) $ map (\(x, y, z) -> fst z - fst x)
                       where min = minimum $ map (\(x, y, z) -> fst z - fst x)

findMaxVal :: [((a, b), (a, b), (a, b))] -> b
findMaxVal list = list !! findMaxTime list

Любая справка ценилась бы.

Спасибо, пепел

5
задан Ash 11 August 2010 в 20:49
поделиться