(10 bodů)
Byl zadán datový typ pro Binární stromy, něco jako
data Strom a = List a | Vrchol (Strom a) (Strom a)
tzn, bez hodnoty ve vnitřních uzlech. Pak tam byla funkce zahada (pokud jsem to měl dobře, tak vracela seznam hodnot listů v pre-order průchodu, ale na přesný znění si už nevzpomenu), úkolem bylo určit:
a) typovou signaturu funkce zahada
b) co vrátí aplikace funkce na nakreslený strom
c) slovy popsat co funkce dělá
d) napsat výstup funkce, která tam byla nadefinovaná (vyskytovaly se tam nějaký nekonečný datový struktury, z toho se bralo prvních 5 prvků atd, docela jednoduchý)
(10 bodů)
Funkce pro převod čísla v číselné soustavě o daném základu na číslo v desítkové soustavě
Příklady:
prevod 2 [1,1,1,0]
14
prevod 64 [1,63]
127
a) napsat typovou signaturu
b) napsat funkci prevod pomocí rekurze
c) napsat funkci prevod pomocí použití jedné z funkcí - map, filter, foldl, foldr
d) napsat funkci prevod pomocí stručných seznamů, ale bez použití funkcí z c)
(15 bodů)
Úkolem bylo nadefinovat funkci
gen n str, která vracela množinu všech slov, která vznikla záměnou n písmen z řetězce str, množina navíc měla být seřazená podle abecedy (ale nevim, jestli podle klasický, nebo podle tý co vracela funkce abeceda).
K dispozici byla funkce abeceda, která vracela seznam možných písmen.
Příklad:
abeceda
["a","b","c"]
gen 1 "aac"
["aaa","aab","abc","acc","bac","cac"]
(15. bodů)
Dva zakořeněné stromy (obecné - ne binární, s hodnotou ve všech uzlech) a,b jsou ekvivalentní, pokud existuje ve stromu b permutace podstromů (a jejich postromů... - rekurzivně do hloubky), taková že je shodná se stromem a. Snažil jsem se to napsat nějak zjednodušeně, ale nevim, jestli se mi to povedlo :D . Z příkladu to bylo jednoduše vidět, ale strom sem moc čitelně nedostanu...
a) napsat datovou strukturu pro reprezentaci takových stromů
b) napsat funkci ekviv, která zjistí, zda dva zadané stromy jsou ekvivalentní