Помогите решить задачи на Haskell
1) Сформировать список 25 степений двойки.
2) Написать функцию для объединения двух упорядоченных по возрастанию списков в один упорядоченный по возрастанию список.
3) Написать функцию для определения первой позиции вхождения заданного элемента в список.
4) Определить, является ли указанное число элементом списка.
5) Оставить в списке только элементы, не кратные голове списка.
6) Удалить из списка все повторяющиеся элементы.
7) Написать функцию для вставки элемента в список, не нарушив при этом его упорядоченности.
8) Даны две точки M1 (x1,y1) и M2 (x2,y2). Выяснить, симметричны ли точки относительно оси ox.
1) Сформировать список 25 степений двойки.
Код:
map (2^) [0..24]
2) Написать функцию для объединения двух упорядоченных по возрастанию списков в один упорядоченный по возрастанию список.
Код:
test :: [Int] -> [Int] -> [Int]
test x y
| (length x) == 0 = y
| (length y) == 0 = x
| (head x) < (head y) = (head x):(test (tail x) y)
| otherwise = (head y):(test x (tail y))
test x y
| (length x) == 0 = y
| (length y) == 0 = x
| (head x) < (head y) = (head x):(test (tail x) y)
| otherwise = (head y):(test x (tail y))
3) Написать функцию для определения первой позиции вхождения заданного элемента в список.
Код:
task3 :: [Int] -> Int -> Int
task3 (x:xs) e
| x == e = 0
| otherwise = 1 + task3 xs e
task3 (x:xs) e
| x == e = 0
| otherwise = 1 + task3 xs e
4) Определить, является ли указанное число элементом списка.
Код:
task4 :: [Int] -> Int -> Bool
task4 (x:xs) e
| x == e = True
| xs == [] = False
| otherwise = False || task4 xs e
task4 (x:xs) e
| x == e = True
| xs == [] = False
| otherwise = False || task4 xs e
*добавлено
Код:
elem 3 [1..20]
5) Оставить в списке только элементы, не кратные голове списка.
Код:
let b = [3..40]
filter (\x -> x `mod` (head b) == 0) b
filter (\x -> x `mod` (head b) == 0) b
6) Удалить из списка все повторяющиеся элементы.
пусть будет такой вариант:
Код:
delP :: Integer -> [Integer] -> [Integer]
delP e (x:xs)
| xs == [] = if x == e then []
else x:[]
| otherwise = if x == e then delP e xs
else x:(delP e xs)
clearList :: [Integer] -> [Integer]
clearList [] = []
clearList (x:xs) | xs == [] = x:[]
clearList (x:xs) = x:(clearList (delP x xs))
delP e (x:xs)
| xs == [] = if x == e then []
else x:[]
| otherwise = if x == e then delP e xs
else x:(delP e xs)
clearList :: [Integer] -> [Integer]
clearList [] = []
clearList (x:xs) | xs == [] = x:[]
clearList (x:xs) = x:(clearList (delP x xs))
7) Написать функцию для вставки элемента в список, не нарушив при этом его упорядоченности.
Код:
task7 :: [Int] -> Int -> [Int]
task7 (x:xs) e
| x >= e = e:x:xs
| e > x = if xs == [] then x:e:[]
else x:(task7 xs e)
task7 (x:xs) e
| x >= e = e:x:xs
| e > x = if xs == [] then x:e:[]
else x:(task7 xs e)
8) Даны две точки M1 (x1,y1) и M2 (x2,y2). Выяснить, симметричны ли точки относительно оси ox
Код:
task8 :: (Int, Int) -> (Int, Int) -> Bool
task8 (x1, y1) (x2, y2)
| (abs x1 == abs x2) && (y1 == (-y2)) = True
| otherwise = False
task8 (x1, y1) (x2, y2)
| (abs x1 == abs x2) && (y1 == (-y2)) = True
| otherwise = False