У меня есть список кортежей кортежей типа :: [((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
Любая справка ценилась бы.
Спасибо, пепел