-2

Im able to sum the zth element of all of the tuples but for some weird reason I only get 1 after dividing my result by 2.

averageYear :: [(String, String, Int)] -> Int
averageYear [] = 0
averageYear ((x,y,z):xs) = (z + (averageYear xs)) `div` (length xs)

Thanks!!

ajanakos
  • 99
  • 1
  • 9

2 Answers2

6

The math is completely wrong.

averageYear [(_, _, 2010)] = (2010 + averageYear []) `div` 2
                           = (2010 + 0) `div` 2
                           = 2010 `div` 2
                           = 1005

To compute the average, you have to divide the sum by the number of items.

average :: [Int] -> Int
average xs = sum xs `div` length xs

averageYear :: [(String, String, Int)] -> Int
averageYear = average . map (\(_, _, year) -> year)
Dietrich Epp
  • 205,541
  • 37
  • 345
  • 415
0

@Dietrich Epp Length xs is zero and not two in your example.

   averageYear ((x,y,z):xs) = (z + (averageYear xs)) `div` (length xs)

If xs is empty then length xs equal zero and you divide by zero.

Zacharie 007
  • 126
  • 4