-
Notifications
You must be signed in to change notification settings - Fork 20
/
Task2_2.hs
66 lines (49 loc) · 1.91 KB
/
Task2_2.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
module Task2_2 where
{-
Задание 2.2
Необходимо реализовать функции foldl, foldr и unfoldr, а также все остальные функции
в данном файле _на основе этих трёх_
-}
import Todo(todo)
import Prelude hiding (foldl, foldr, unfoldr, map, concatMap,
filter, maxBy, minBy, reverse, sum, product, elem)
foldl :: (b -> a -> b) -> b -> [a] -> b
foldl = todo
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr = todo
unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr = todo
-- Сумма всех элементов списка (пример)
sum :: [Integer] -> Integer
sum lst = foldl (+) 0 lst
-- Переворот списка (Пример)
reverse :: [a] -> [a]
reverse lst = foldl f [] lst where f t h = h:t
-- Отображение элементов списка
map :: (a -> b) -> [a] -> [b]
map = todo
-- Произведение всех элементов списка
product :: [Integer] -> Integer
product = todo
-- Выделение из списка Maybe всех существующих значений
catMaybes :: [Maybe a] -> [a]
catMaybes = todo
-- Диагональ матрицы
diagonal :: [[a]] -> [a]
diagonal = todo
-- Фильтр для всех элементов, не соответствующих предикату
filterNot :: (a -> Bool) -> [a] -> [a]
filterNot = todo
-- Поиск элемента в списке
elem :: (Eq a) => a -> [a] -> Bool
elem = todo
-- Список чисел в диапазоне [from, to) с шагом step
rangeTo :: Integer -> Integer -> Integer -> [Integer]
rangeTo from to step = todo
-- Конкатенация двух списков
append :: [a] -> [a] -> [a]
append = todo
-- Разбиение списка lst на куски размером n
-- (последний кусок может быть меньше)
groups :: [a] -> Integer -> [[a]]
groups lst n = todo