Skip to content

Latest commit

 

History

History
80 lines (77 loc) · 4.57 KB

ex10-20191210-tasks.md

File metadata and controls

80 lines (77 loc) · 4.57 KB

Упражнение 10 - Списъци и ламбди

код от упражнението

Зад.0.

Припомнете си какво правят следните полезни функции за списъци. Очаква се от вас да можете да реализирате всяка една:

map, filter, reverse, length, null, elem, take, drop, zip, zipWith, takeWhile, dropWhile

Зад.1.

Да се напишат функции complAdd, complSub и complMul, които извършват съответните операции над комплексни числа, представени като наредени двойки от координатите си:

complAdd (1,2) (-3,5) -> (-2,7)
complSub (4,8) (2,-1) -> (2,9)
complMul (3,5) (2,1) -> (1,13)

Зад.2.

Да се напише функция distance, която намира разстоянието между две точки в равнината (наредени двойки (Double, Double)):

distance (-2,3) (1,7) -> 5
distance (0,0) (1,1) -> 1.4142135623730951

Зад.3.

Да се напише функция replicate', която конструира списък от n повторения на даден обект:

replicate' 5 10 -> [10,10,10,10,10]

Зад.4.

Използвайте foldr или foldl, за да напишете следните функции:

  • minimum'/maximum'
  • reverse'
  • length'
  • all'/any'
  • append'
  • replicate'
  • makeSet' (вж. по-долу)

Зад.5. Използвайте list comprehension, за да напишете следните функции:

  • брой/сума на делителите на дадено число
  • проверка дали дадено число е просто
  • descartes - декартово произведение на два списъка

Зад.6.

Да се генерира безкрайния списък primes от прости числа:

take 5 primes -> [2,3,5,7,11]

Зад.7*.

Да се генерира безкрайния списък от прости числа по метода на ситото на Ератостен.

Зад.8.

Да се генерира безкраен списък, който съдържа всички наредени двойки от естествени числа.

Упътване: какъв резултат ще върне извикването на elemIndex (2,3) върху Вашия списък?

Зад.9.

Да се генерира безкраен списък, който съдържа всички Питагорови тройки: наредени тройки от естествени числа, които могат да бъдат страни на правоъгълен триъгълник

Зад.10.

Да се напише функция 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)]

Зад.10.

Да се напише функция maxRepeated, която по списък от стойности връща дължината на най-дългия подсписък, съставен от еднакви стойности:

maxRepeated [1,1,2,3,3,3,4,2,2,2,2,1,1] -> 4

Зад.11.

Да се напише функция makeSet, която по даден списък връща всички негови уникални елементи (редът им няма значение):

makeSet [1,1,2,3,3,3,4,2,2,2,1,1] -> [1,2,3,4]
makeSet "abba" -> "ab"

Зад.12.

Да се напише функция histogram, която за всяка уникална стойност от даден списък връща списък от наредени двойки от вида (<стойност>, <общ брой срещания>):

histogram [1,1,2,3,3,3,4,2,2,2,1,1] -> [(1,4),(2,4),(3,3),(4,1)]

Зад.13.

Да се напише функция maxDistance, която получава списък от точки (наредени двойки (Double, Double)) и връща дължината на най-дългата отсечка между някои две от тях.

maxDistance [(-1.1, 1), (1.8, 2), (3, 1), (-1, -2)] -> 5.0