List 双打名单的平均数

List 双打名单的平均数,list,haskell,List,Haskell,我在编写Haskell函数时遇到了一些问题。我正试图得到双打的三倍列表的平均值。当我只除以'length xs'时,我得到一个错误,长度是Int,所以我尝试使用fromIntegeral,它没有给我一个错误,但没有给出正确的答案。例如,如果我测试, 平均值[(2.0,1.0,3.0)]它返回[6.0] averages :: [(Double, Double, Double)] -> [Double] averages xs = [ (x+y+z) / fromIntegral (leng

我在编写Haskell函数时遇到了一些问题。我正试图得到双打的三倍列表的平均值。当我只除以'length xs'时,我得到一个错误,长度是Int,所以我尝试使用fromIntegeral,它没有给我一个错误,但没有给出正确的答案。例如,如果我测试,
平均值[(2.0,1.0,3.0)]
它返回
[6.0]

averages :: [(Double, Double, Double)] -> [Double]
averages xs = [ (x+y+z) / fromIntegral (length xs) | (x,y,z) <- xs ]

平均值::[(双精度,双精度,双精度)]->[双精度]

平均值xs=[(x+y+z)/fromIntegral(长度xs)|(x,y,z)如果您误解了自己的类型函数,平均值总是超过3,因为您有一个三元组(或三元组)列表:

平均值::[(双精度,双精度,双精度)]->[双精度]
平均值xs=[(x+y+z)/3 |(x,y,z)平均值[(8,6,7),(4,4,10),(1,1,1)]
=> [7.0,6.0,1.0]

请注意,当您计算
平均值[(2.0,1.0,3.0)]时,
长度xs
将计算为
1
。该列表包含一个元素:一个元组。由于您要对三元组的元素求平均值,因此您只需除以
3

其他人已经解释了您得到错误答案的原因,但我想敦促您将问题分成两部分

averageTriple :: (Double, Double, Double) -> Double
averageTriple (x,y,z) = ...

averageTriples :: [(Double, Double, Double)] -> [Double]
averageTriples ts = ... -- use averageTriple here

提示:您的列表长度是多少?您要加多少个数字?
averageTriple :: (Double, Double, Double) -> Double
averageTriple (x,y,z) = ...

averageTriples :: [(Double, Double, Double)] -> [Double]
averageTriples ts = ... -- use averageTriple here