我设计了一个函数来计算列表的平均值。尽管它可以正常工作,但是我认为它可能不是最佳解决方案,因为它需要两个功能而不是一个。是否可以仅使用一个递归函数来完成这项工作?
calcMeanList (x:xs) = doCalcMeanList (x:xs) 0 0
doCalcMeanList (x:xs) sum length = doCalcMeanList xs (sum+x) (length+1)
doCalcMeanList [] sum length = sum/length
最佳答案
您的解决方案很好,使用两个功能并不比一个功能差。不过,您可以将尾部递归函数放在where
子句中。
但是,如果您想一行执行:
calcMeanList = uncurry (/) . foldr (\e (s,c) -> (e+s,c+1)) (0,0)