Второ малко контролно, КН 6 група
Изисквания за завършване
Отворено: петък, 12 януари 2024, 16:15
До: петък, 12 януари 2024, 17:20
Всяка задача носи по 4т. Решенията носят бонус 1т ако са оценени с поне 2/4т и са написани на Haskell
Резултата от функцията трябва да бъде такова дърво, че наследниците на всеки връх са непразни и взаимно прости с родителя си. Всички наследници които не изпълняват условието биват премахнати от оригиналното дърво.
2. Да се реализира функция mergeFromMaybes, която приема два безкрайни списъка с елементи от тип Maybe a, слива ги и връща нов безкраен списък с елементи от тип a.
Сливането се случва като за всеки два елемента xi и yi от входните списъци x1,x2,... и y1,y2,... в резултата се включи първата съществуваща стойност от двата елемента. Тоест за всяко i:
- Ако xi = Just u и yi = Just v, то u се включва в резултата
- Ако xi = Just u и yi = Nothing, то u се включва в резултата
- Ако xi = Nothing и yi = Just v, то v се включва в резултата
- Ако xi = Nothing и yi = Nothing, то нищо не се добавя в резултата
1. Да се реализира функция prune, която приема и връща дърво от положителни цели числа с произволен брой разклонения.
data Tree = Empty | Node Int [Tree]
deriving (Show)
prune :: Tree -> Tree
prune = undefined
Резултата от функцията трябва да бъде такова дърво, че наследниците на всеки връх са непразни и взаимно прости с родителя си. Всички наследници които не изпълняват условието биват премахнати от оригиналното дърво.
tree :: Tree
tree =
Node
10
[ Node 3 [Empty, Node 3 [], Node 2 [Empty, Empty]],
Node 7 [Node 14 [], Node 2 [], Node 1 [Empty], Node 15 [Empty]],
Node 20 [Node 9 [Node 10 []]]
]
result :: Tree
result =
Node
10
[ Node 3 [Node 2 []],
Node 7 [Node 2 [], Node 1 [], Node 15 []]
]
prune tree = result
2. Да се реализира функция mergeFromMaybes, която приема два безкрайни списъка с елементи от тип Maybe a, слива ги и връща нов безкраен списък с елементи от тип a.
mergeFromMaybes :: [Maybe a] -> [Maybe a] -> [a]
mergeFromMaybes = undefined
Сливането се случва като за всеки два елемента xi и yi от входните списъци x1,x2,... и y1,y2,... в резултата се включи първата съществуваща стойност от двата елемента. Тоест за всяко i:
- Ако xi = Just u и yi = Just v, то u се включва в резултата
- Ако xi = Just u и yi = Nothing, то u се включва в резултата
- Ако xi = Nothing и yi = Just v, то v се включва в резултата
- Ако xi = Nothing и yi = Nothing, то нищо не се добавя в резултата
mergeFromMaybes [Just 1, Nothing, Just 3, Nothing, Just 5, Nothing, ...]
[Just 2, Nothing, Nothing, Just 8, Nothing, Nothing, ...]
= [1, 3, 8, 5, ...]