На этом шаге мы приведем задачи для самостоятельного решения.
1*. Напишите функцию, вычисляющую произведение элементов числового списка.
2*. Напишите функцию, возвращающую список, у которого первый элемент является суммой квадратов, а второй - произведением квадратов элементов числового списка.
3. Напишите функцию, вычисляющую произведение сумм положительных и отрицательных элементов числового списка LST.
4. Напишите функцию, определяющую наибольшее из всевозможных попарных произведений элементов числового списка.
5. Напишите функцию, возвращающую список пар, первым элементом которых является атом, а вторым - количество вхождений его в список.
6*. Даны две строки. Найдите расстояние Хэмминга между ними.
7*. ([1, с.68,№7.60]) Прочитайте строку и сообщите, сколько раз встречается нужный символ.
1*. Напишите функцию, возвращающую элемент по номеру его расположения в списке.
2*. Напишите функцию, возвращающую номер первого вхождения заданного элемента в список.
3. Напишите функцию от трёх аргументов, включающую заданный элемент в список на указанную позицию.
4. ([1, с.67-68,№7.57]) Напишите программу, запрашивающую число (не более 100 знаков) и печатающую слово "Плавное", если число плавное, и "Нет" в противном случае.
1*. Напишите функцию, увеличивающую каждый элемент числового списка в k раз.
2*. Напишите функцию, обращающую элементы списка: первый элемент становится последним, второй - предпоследним и т.д. до последнего элемента, который становится первым.
3*. Напишите функцию, осуществляющую перестановку местами соседних элементов списка. Например:
[1,2,3,4,5,6] -> [2,1,4,3,6,5], [1,2,3] -> [2,1,3].
4*. Напишите функцию, которая по двум заданным спискам выводит единый список, элементы которого образованы путём сложения элементов исходных списков, стоящих на одинаковых позициях.
5*. Напишите функцию, позволяющую приписывать один список к другому.
6. Напишите функцию, обращающую каждый элемент списочной структуры (т.е. списки), а также саму списочную структуру. Например:
[1,2,3,4,5,6,7,8,9] -> [9,8,7,6,5,4,3,2,1], [[1,2],[3],[4,5,6]] -> [[6,5,4],[3],[2,1]], [[[1,(-2),(-5),10]],[[(-3),(-2),1]]] -> [[[1,(-2),(-3)]],[[10,(-5),(-2),1]]].
7. Напишите функцию, удаляющую из списка повторные вхождения элементов.
8. Укажите назначение следующих функций:
add1:: [Integer] -> Int -> [Integer] add1 lst k = take (k-1) lst ++ [1+lst !! (k-1)] ++ drop k lst ----------------------------------------- add12:: [Integer] -> Int -> [Integer] add12 lst k | k==0 = lst | k==1 = 1+head lst : add1' (tail lst) (k-1) | True = head lst : add1' (tail lst) (k-1) ------------------------------------------------------ prom1:: [Integer] -> Int -> [Integer] prom1 lst k = [lst !! (k-1),lst !! k] ------------------------------------------------ prom2 lst k | k==1 = [head lst, head $ tail lst] | True = prom' (tail lst) (k-1) ------------------------------------------- -- Неудачные тестовые примеры: ----------------------------------------------- test1 = add1 [1,1,1,1,1,1] 6 == [1,1,1,1,1,2] && add1 [1,1,1,1,1,1] 1 == [2,1,1,1,1,1] test2 = add2 [1,1,1,1,1,1] 3 == [1,1,2,1,1,1] && add2 [1] 1 == [2] && add2 [1,1,1,1,1,1] 1 == [2,1,1,1,1,1] test3 = prom1 [1,2,3,4,5,6] 5 == [5,6] test4 = prom2 [1,2,3,4,5,6] 2 == [2,3]
9. Укажите назначение следующей функции:
swap lst i j | null lst || i==j || lst !! i==lst !! j = lst | i<j = take i lst ++ [lst !! j] ++ take (j-i-1) (drop (i+1) lst) ++ [lst !! i] ++ drop (j+1) lst | True = swap lst j i ------------------------------ -- Неудачные тестовые примеры: --------------------------------------------------- test = swap [3,4, 5,6,7,89,0,12,34,55,666,78] 5 2 == [3,4,89,6,7, 5,0,12,34,55,666,78] && swap [0,45,3,2,4] 2 4 == [0,45,4,2,3] && swap [4,6,7,5] 3 1 == [4,5,7,6] && swap [2,3,4,5,6,1,45,234,36] 5 2 == [2,3,1,5,6,4,45,234,36]
10*. Напишите функцию, моделирующую функционал map.
11*. [1, с.104,№10.42] Определим последовательность строк Фибоначчи s1,s2,...,sk,... следующим образом:
s1='b', s2='a', sk=sk-1sk-2, k>2.
b,a,ab,aba,abaab,abaababa,abaababaabaab.
12*. [1, с.146,№13.3] Можно ли разбить заданную строку на две части так, чтобы, переставив их местами, получить результирующую?
Со следующего шага мы начнем рассматривать поиск и сортировку элементов в списке.