Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
28.06.2014
Размер:
2.37 Кб
Скачать
-- 2.1. Описать функцию concat :: [a]->[a]->[a] такую, что concat [x1..xn] [y1..ym] = [x1..xn y1..ym].
f21 xs ys = f26_2 xs ys 1 (len xs + 1)

--2.2. Описать функцию mix :: [a]->[a]->[a] такую, что mix [x1..xn] [y1..yn] = [x1 y1 x2 y2...xn yn].
f22 xs ys = f26_2 xs ys 1 2

-- 2.4. Описать функцию, получающую по заданному списку список тех же элементов в обратном порядке.
f24 xs = f26 xs 1

--2.5. Описать функцию, получающую по заданному списку список по следующему правилу:

-- * порядок элементов на нечётных позициях сохраняется;
-- * порядок элементов на чётных позициях меняется на обратный.
f25 xs = f26 xs 2

--2.6. Аналогично 2.5. Задано число n и список. Требуется получить список, в котором:
-- * порядок элементов на позициях, не кратных n, сохраняется;
-- * порядок элементов на позициях, кратных n, меняется на обратный.

f26 xs n = f26_1 xs [] [] 1 n




------------------------------------------------------------------------------------------

-- Первый парамметр - Исходный спиок
-- Второй параметр - список элементов, номера которых не кратны n
-- Третий параметр - список элементов, номера которых кратны n
-- Четвертый параметр - номер рассматриваемого элемента по модулю n.
-- Пятный параметр - номер из условия
-- Сложность функции - n.
-- Просматривая каждый элемент, определяем в какой список он входит:
-- его номер кратен n или нет.
-- Разобрав весь список запускаем процедуру f26_2


f26_1 [] y z i 1 = z
f26_1 [] y z i n = f26_2 (f26 y 1) z 1 n
f26_1 (x:xs) y z i n = if i < n then
f26_1 xs (x:y) z (i+1) n
else
f26_1 xs y (x:z) 1 n


--Процедура соединяет 2 списка. составленных в процедуре f26_1 в один
-- Её сложность равна n - сумме мощностей множеств
f26_2 [] ys i n= ys
f26_2 xs [] i n= xs
f26_2 (x:xs) (y:ys) i n = if i < n then
x:(f26_2 xs (y:ys) (i+1) n)
else
y:(f26_2 (x:xs) ys 1 n)

-- Процедура для вычисления длины списка.
-- Сложность n
len [] = 0
len (x: xs) = 1 + (len xs)

---------------------------------------------------------------------
Соседние файлы в папке 2