Задание:
Определите следующие функции с использованием функций высшего порядка Напишите на функциональном языке программирования haskell:
1. Функция вычисления среднего арифметического элементов списка вещественных чисел с использованием функции foldr. Функция должна осуществлять только один проход по списку.
2. Функция, вычисляющая скалярное произведение двух списков (используя функции foldr и zipWith)
3. Функция countEven, возвращающая количество чётных элементов в списке.
4. Функция quicksort, осуществляющую быструю сортировку списка по следующему рекурсивному алгоритму. Для того, чтобы отсортировать список xs, из него выбирается первый элемент (обозначим его x). Остальной список делится на две части: список, состоящий из элементов xs, меньших x и список элементов, больше x. Эти списки сортируются (здесь проявляется рекурсия, поскольку они сортируются этим же алгоритмом), а затем из них составляется результирующий список вида as ++ [x] ++ bs, где as и bs – отсортированные списки меньших и больших элементов соответственно.
Решения:
1)
average s = foldr (+) 0 s / foldr (\x y -> 1+y) 0 s
1.6 :: Double
32 :: Integer
3 :: Int
quicksort (h:t) = (quicksort(filter (=h) t))
[1,1,1,2,2,3,3,10] :: [Integer]
Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.