-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path10_2.hs
20 lines (15 loc) · 1.2 KB
/
10_2.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{--
Задача 10-2
Одеров Роман, 545 гр.
--}
{- Идея представить массив операторами (x:), где x - элемент массива. Т.е. [1,2,3]=((1:).(2:).(3:)) []
Т.о. надо сформировать операторы в обратном порядке.
Начать можно с тождественного отображения, которое ничего не поменяет.
Т.е. представим foldr, как цикл с последнего элемента массива [x1,...,xN] к первому.
На каждом шаге будем приписывать x (очередной элемент массива) к концу нового массива.
Но нельзя (++). Тогда делаем так: acc.(x:) - здесь к сформированным элементам добавляем в конец операцию добавления нового эл-та
Т.е. по шагам:
(\i->i).(xN:) --> (\i->i).(x[N]:) .(x[N-1]:) --> ... --> (\i->i).(x[N]:). ... .(x[1]:)
Осталось дать этой функции аргумент []
-}
myreverse xs = (foldr (\x acc -> acc.(x:)) (\i->i) xs) []