[Haskell-beginners] Average of numeric list
Daniel Fischer
daniel.is.fischer at googlemail.com
Mon Apr 4 17:46:11 CEST 2011
On Monday 04 April 2011 17:15:20, Nadav Chernin wrote:
> Hello,
>
> I tried to write function mean - average of numeric list.
>
> mean::(Fractional a)=>[a]->a
> mean a = (realToFrac (sum a)) / (realToFrac (length a))
>
> But error occures:
>
> Could not deduce (Real a) from the context (Fractional b)
> arising from a use of `realToFrac'
> To correct this function, i rewrite this function:
>
> mean::(Real a, Fractional a)=>[a]->b
> mean a = (realToFrac (sum a)) / (realToFrac (length a))
>
> Is there most simple way to write this function?
mean :: Fractional a => [a] -> a
mean xs = sum xs / fromIntegral (length xs)
Note however, that that's not a particularly efficient way to calculate the
mean, since the compiler isn't smart enough to transform it into a loop
traversing the list once (so allowing it to be garbage collected as it is
consumed and the computation to run in constant space) and keeping the
accumulators evaluated.
>
> Thanks, Nadav
More information about the Beginners
mailing list