FP Cvičení 6
Jump to navigation
Jump to search
Operátory
- Definujte funkce, které provádí příslušné logické operace:
not', and', or', nand', xor', impl', equ'
- Definujte 'standardní' prioritu pro případ, kdy je použijeme jako operátory.
- Implemenetujte funkci která vytiskne pravdivostní tabulku logického výrazu.
table :: (Bool -> Bool -> Bool) -> IO ()
table (\a b -> (and' a (or' a b)))
True True True
True False True
False True False
False False False
- Rozšiřte predchozí funkci tak aby přijímala výraz s libovolným počtem proměnných (počet proměnných bude zadán jako druhý parametr).
tablen :: Int -> ([Bool] -> Bool) -> IO ()
tablen 3 (\[a,b,c] -> a `and'` (b `or'` c) `equ'` a `and'` b `or'` a `and'` c)
True True True => True
True True False => True
True False True => True
True False False => False
False True True => False
False True False => False
False False True => False
False False False => False
Komplexní funkce - Huffmanovo kódování
- Vytvořte funkci která spočíta Huffmanovo kódování pro daný seznam znaků a jejich četností.
huffman :: [(Char, Int)] -> [(Char, String)]
*Main> huffman [('a',45),('b',13),('c',12),('d',16),('e',9),('f',5)]
[('a',"0"),('b',"101"),('c',"100"),('d',"111"),('e',"1101"),('f',"1100")]