获取haskell计算列表的平均值

获取haskell计算列表的平均值,haskell,fold,Haskell,Fold,我有 这将输出一个数字列表,我希望结果是这些数字的平均值。是否可以对结果使用foldr函数?您可以保持函数的原样,并使用一个函数对其结果进行后期处理,以计算任何数字列表的平均值 对其进行编码以使其只遍历列表的一种方法是 avgRatingsForDirector :: String -> [Film] -> [Int] avgRatingsForDirector _ [] = [] avgRatingsForDirector requestedDirector ((Film _ di

我有


这将输出一个数字列表,我希望结果是这些数字的平均值。是否可以对结果使用foldr函数?

您可以保持函数的原样,并使用一个函数对其结果进行后期处理,以计算任何数字列表的平均值

对其进行编码以使其只遍历列表的一种方法是

avgRatingsForDirector :: String -> [Film] -> [Int]
avgRatingsForDirector _ [] = []
avgRatingsForDirector requestedDirector ((Film _ director _ ((_, rating):ratings)):restOfFilms)
    | requestedDirector == director = [rating] ++ avgRatingsForDirector requestedDirector restOfFilms
    | otherwise = avgRatingsForDirector requestedDirector restOfFilms
Bang模式使计算效率更高

另见:

{-# LANGUAGE BangPatterns #-}
import Data.List

avg :: (Integral a, Fractional b) => [a] -> b
avg xs = g $ foldl' c (0,0) xs
 where
   c (!a,!n) x = (a+x,n+1)
   g (a,n) = fromIntegral a / fromIntegral n