Haskell разделить сумму второго элемента в кортеже

голоса
0

У меня есть список кортежей, и я хочу работать в среднем так: (сумма всех ИНТ-х) / длина списка

Список выглядит следующим образом:

[(Student1, 1), (Student2, 2), (Student3, 3)]

до сих пор у меня есть функция, которая addes вверх все «возраст» (1, 2 и 3), но я не знаю, как совместить это с делением длины списка.

Функция:

addMarks :: [(String, Int)] -> Int
addMarks list = sum . map snd / length(list)

Длина (список) дает мне 3, так что, если я могу разделить функцию суммы по длине я получу среднее.

без LAMDA выражений, если я могу,

Благодаря! Том

Задан 28/02/2014 в 23:17
источник пользователем
На других языках...                            


1 ответов

голоса
2

Используйте divфункцию, если вы хотите результат Int. Использование /даст дробный результат. Этот код должен работать:

addMarks :: [(String, Int)] -> Int
addMarks list = sum (map snd list) `div` length(list)   

Или более чище версия:

addMarks :: [(String, Int)] -> Int
addMarks list = sum nums `div` length nums
  where nums = map snd list

Вы можете также использовать /функцию для решения этого. Вы должны затем использовать такие функции , как fromIntegralпреобразовать их в соответствующих типов.

Ответил 28/02/2014 в 23:24
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more