gpt4 book ai didi

list - 从 Haskell 中的元组列表中选择数据

转载 作者:行者123 更新时间:2023-12-04 17:58:38 25 4
gpt4 key购买 nike

我有一个 :: [((a, b), (a, b), (a, b))] 类型的元组的元组列表,在 haskell 。

对于某些情况,3 点 (a, b)表示 U 形曲线上的 (time, value) 对,第一个点在初始时间 t1 在曲线 x1 上具有最大值,第三个点具有更大的时间 t3=t1+dt 和值 x3

我想在列表 [((t1, x1), (t2, x2), (t3, x3))] 中找到最宽 U 的范围通过取最大 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

任何帮助,将不胜感激。

谢谢,阿什

最佳答案

您可以使用 maximumBycomparing :

module Main where

import Data.Ord (comparing)
import Data.List (maximumBy)

findMaxVal :: (Num a, Ord a, Num b, Ord b) => [((a, b), (a, b), (a, b))] -> b
findMaxVal = xWidth . maximumBy (comparing tWidth)
where
xWidth ((_, x1), (_, x2), _) = x2 - x1
tWidth ((t1, _), _, (t3, _)) = t3 - t1

关于list - 从 Haskell 中的元组列表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com