Сделать домашней|Добавить в избранное
 

Сайт, посвящен программированию,
исходникам разных программ и
известным алгоритмам

 
Исходники программ » Языки программирования » Haskell » Лабораторная работа № 5 (Haskell)
на правах рекламы

Лабораторная работа № 5 (Haskell)

Автор: admin от 3-01-2012, 19:53

Задание:
Определите следующие функции с использованием функций высшего порядка Напишите на функциональном языке программирования haskell:
1. Функция вычисления среднего арифметического элементов списка вещественных чисел с использованием функции foldr. Функция должна осуществлять только один проход по списку.
2. Функция, вычисляющая скалярное произведение двух списков (используя функции foldr и zipWith)
3. Функция countEven, возвращающая количество чётных элементов в списке.
4. Функция quicksort, осуществляющую быструю сортировку списка по следующему рекурсивному алгоритму. Для того, чтобы отсортировать список xs, из него выбирается первый элемент (обозначим его x). Остальной список делится на две части: список, состоящий из элементов xs, меньших x и список элементов, больше x. Эти списки сортируются (здесь проявляется рекурсия, поскольку они сортируются этим же алгоритмом), а затем из них составляется результирующий список вида as ++ [x] ++ bs, где as и bs – отсортированные списки меньших и больших элементов соответственно.

Решения:

1)

average :: [Double] -> Double
average s = foldr (+) 0 s / foldr (\x y -> 1+y) 0 s
Результат:
Main> average [1.5,1.3,1.2,1.9,2.1]
1.6 :: Double  
2)
dotLists a b = foldr (+) 0 (zipWith (*) a b)
Результат:
Main> dotLists [1,2,3] [4,5,6]
32 :: Integer
3)
countEven a = length (filter (even) a)
Результат:
Main> countEven [1,2,5,8,2,23]
3 :: Int
4)
quicksort [] = []
quicksort (h:t) = (quicksort(filter (=h) t))
Результат:
Main> quicksort [1,2,3,1,1,3,2,10]
[1,1,1,2,2,3,3,10] :: [Integer]

 

Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий