На этом шаге мы приведем задачи для самостоятельного решения.
1*. Определите назначение следующих функций:
(1) ddd:: [Int] -> [Int] ddd lst = map (`mod` 2) lst (2) abc:: [Int] -> Bool abc lst = not (sum (map (`rem` 2) lst)>0) (3) xil:: Int -> [[Int]] -> Int xil x lst = length (filter (elem x) lst) (4) f lst1 lst2 = filter (< 0) lst1 ++ filter (>= 0) lst2 test = f [1,2,(-1)] [(-3),5,6] == [(-1),5,6] && f [1,(-2),(-1)] [3,5,6] == [(-2),(-1),3,5,6] && f [1,2,1] [(-3),(-5),(-6)] == [] (5) f:: Double -> Int -> Double f x k = sum (take k (tail (iterate sin x))) ------------------------------------------- -- Неудачные тестовые примеры: ----------------------------------------- test1 = abs(f 1 1 - sin 1)<0.000000000001 test2 = abs(f 1 3 - (sin 1)-((sin.sin) 1)-((sin.sin.sin) 1)) <0.000001 (6) length (takeWhile (=='0') (reverse (show (product [1..45])))) (7) map (\y -> (y,y^2)) (filter (\x -> elem '3' (show (x^2))) [1..100]) (8) log2 x = toInteger (length (takeWhile (>1) (iterate (/2) x))) (9) word2Int:: [Char] -> [Int] word2Int wrd = map (\x -> ord x - ord '0') wrd ---------------------------------------------- test1 = word2Int wrd==map digitToInt wrd where wrd = "1235234345735745674567456742342342352342"
2*. Напишите функцию, в которой используется функционал filter с предикатом >, возвращающую список элементов заданного списка, больших 5.
3*. Напишите функцию, содержащую функционал span с предикатом >, разделяющую заданный список на два и возвращающую пару полученных списков.
4*. Напишите функцию, содержащую функционал span с предикатом <=, разделяющую заданный список на два и возвращающую список из полученных списков.
6. Напишите функцию, использующую функционалы и вычисляющую значение функции
sin(x)+sin(sin(x))+sin(sin(sin(x)))+ ... +sin(sin...(sin(x)...). k раз
1*. Напишите функцию, использующую функционалы и конструирующую список из двух заданных таким образом, что из первого списка берутся только отрицательные числа, а из второго - только положительные.
2. Напишите функцию, использующую функционалы и объединяющую первую половину элементов первого списка со второй половиной элементов второго списка.
3. Напишите функцию, использующую функционалы и конструирующую список из n элементов k, где k - неотрицательный минимальный элемент заданного списка.
Если минимальный элемент списка будет отрицательным числом, то функция должна вернуть пустой список.
Со следующего шага мы начнем рассматривать потенциально бесконечные списки.