Припомнете си какво правят следните полезни функции за списъци. Очаква се от вас да можете да реализирате всяка една:
map, filter, reverse, length, null, elem, take, drop, zip, zipWith, takeWhile, dropWhile
Да се напишат функции complAdd, complSub и complMul, които извършват съответните операции над комплексни числа, представени като наредени двойки от координатите си:
complAdd (1,2) (-3,5) -> (-2,7)
complSub (4,8) (2,-1) -> (2,9)
complMul (3,5) (2,1) -> (1,13)
Да се напише функция distance
, която намира разстоянието между две точки в равнината (наредени двойки (Double, Double)
):
distance (-2,3) (1,7) -> 5
distance (0,0) (1,1) -> 1.4142135623730951
Да се напише функция replicate'
, която конструира списък от n повторения на даден обект:
replicate' 5 10 -> [10,10,10,10,10]
Използвайте foldr
или foldl
, за да напишете следните функции:
- minimum'/maximum'
- reverse'
- length'
- all'/any'
- append'
- replicate'
- makeSet' (вж. по-долу)
- брой/сума на делителите на дадено число
- проверка дали дадено число е просто
- descartes - декартово произведение на два списъка
Да се генерира безкрайния списък primes
от прости числа:
take 5 primes -> [2,3,5,7,11]
Да се генерира безкрайния списък от прости числа по метода на ситото на Ератостен.
Да се генерира безкраен списък, който съдържа всички наредени двойки от естествени числа.
Упътване: какъв резултат ще върне извикването на elemIndex (2,3)
върху Вашия списък?
Да се генерира безкраен списък, който съдържа всички Питагорови тройки: наредени тройки от естествени числа, които могат да бъдат страни на правоъгълен триъгълник
Да се напише функция compress
, която по списък от стойности връща списък от наредени двойки от вида (<стойност>, <брой последователни срещания>):
compress [1,1,2,3,3,3,4,2,2,2,2,1] -> [(1,2),(2,1),(3,3),(4,1),(2,4),(1,1)]
compress "abba" -> [('a',1),('b',2),('a',1)]
Да се напише функция maxRepeated
, която по списък от стойности връща дължината на най-дългия подсписък, съставен от еднакви стойности:
maxRepeated [1,1,2,3,3,3,4,2,2,2,2,1,1] -> 4
Да се напише функция makeSet
, която по даден списък връща всички негови уникални елементи (редът им няма значение):
makeSet [1,1,2,3,3,3,4,2,2,2,1,1] -> [1,2,3,4]
makeSet "abba" -> "ab"
Да се напише функция histogram
, която за всяка уникална стойност от даден списък връща списък от наредени двойки от вида (<стойност>, <общ брой срещания>):
histogram [1,1,2,3,3,3,4,2,2,2,1,1] -> [(1,4),(2,4),(3,3),(4,1)]
Да се напише функция maxDistance
, която получава списък от точки (наредени двойки (Double, Double)
) и връща дължината на най-дългата отсечка между някои две от тях.
maxDistance [(-1.1, 1), (1.8, 2), (3, 1), (-1, -2)] -> 5.0