Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Готовые лабораторные работы / 2 / 214
.hs -- Описать функцию, осуществляющую циклический сдвиг списка вправо на n позиций (n крайних справа элементов перемещается в начало списка).
--Сложность m*(m-n)
f214 l n = klei (f214_2 l ((mylength l ) -n)) (f214_1 l ((mylength l ) -n))
--сложности m-n
f214_2 [] a = error "Range Error"
f214_2 l 0 = l
f214_2 (a:l) n = f214_2 l (n-1)
f214_1 [] a = error "Range Error"
f214_1 l 0 = []
f214_1 (a:l) n = a:(f214_1 l (n-1))
--Сложность m
klei [] l2 = l2
klei (a:l1) l2 = a:(klei l1 l2)
--Сложность m - длина списка
mylength [] = 0
mylength (a:as) = 1 + mylength as
--Сложность m*(m-n)
f214 l n = klei (f214_2 l ((mylength l ) -n)) (f214_1 l ((mylength l ) -n))
--сложности m-n
f214_2 [] a = error "Range Error"
f214_2 l 0 = l
f214_2 (a:l) n = f214_2 l (n-1)
f214_1 [] a = error "Range Error"
f214_1 l 0 = []
f214_1 (a:l) n = a:(f214_1 l (n-1))
--Сложность m
klei [] l2 = l2
klei (a:l1) l2 = a:(klei l1 l2)
--Сложность m - длина списка
mylength [] = 0
mylength (a:as) = 1 + mylength as