Okruhy otázok na skúšky
1. Funkcionálne programovanie
- Hlavné vlastnosti funkcionálneho programovania
- Rozdiely a výhody oproti iným paradigmám
2. Funkcie
- Referenčná transparentnosť (definícia, výhody)
- Arita funkcií
- Čiastočná aplikácia a currying
- Funkcie vyššieho rádu
3. Stratégie vyhodnocovania funkcií
- Vlastnosti stratégií výpočtu
- Kanonická forma výrazu
- Normálne poradie redukcie
- Vnútorná alebo vonkajšia redukcia zľava
- Výpočet na základe hodnoty alebo na základe požiadavky
4. Funkcie v jazyku Haskell
- Definícia funkcie
- Aplikovanie funkcie
- Podmienky (strážcovia — guards)
- Funkcia definovaná pomocou viacerých rovníc
- Lokálne funkcie a premenné
- Definícia typu funkcie
5. Zoznamy
- Reprezentácia zoznamov v jazyku Haskell a funkcie na prácu s nimi
- Práca s zoznamami pomocou porovnávania vzorov (pattern matching)
- Funkcie vyššieho rádu pre prácu s zoznamami (
map
, filter
, fold*
, atď.) a význam ich použitia
- Množinové abstrakcie (list comprehension)
6. Dátové typy
- Násobné a súčtové typy a ich definícia v jazyku Haskell
- Algebraické dátové typy
- Konštruktory dátových typov ako funkcie
- Porovnávanie vzorov (pattern matching)
- Rekurzívne typy
- Parametrický polymorfizmus
7. Typové triedy a polymorfizmus
- Základné typy polymorfizmu a ich podpora v jazyku Haskell
- Význam typových tried
- Definícia typovej triedy a jej inštancií
- Použitie typových tried v definícii typu funkcie
- Typové triedy vyššieho rádu, druhy (kinds)
8. Monády
- Princíp realizácie vstupných a výstupných operácií v jazyku Haskell
- Typová trieda
Monad
a jej vlastnosti, význam operátora >>=
- Význam použitia monád
- Príklady monád
- Zápis monadických operácií pomocou
do
9. Jazyk lambda
- Základná syntax výrazov lambda
- Pravidlá zámeny výrazov: zámena alfa, zámena beta, zámena eta.
- Normálne poradie redukcie výrazov lambda
- Reprezentácia pravdivostných hodnôt a čísel pomocou výrazov lambda (Church encoding)
- Kombinátor: definícia a význam
10. Funkcionálne programovanie v jazykoch Java a Clojure
- Prostriedky funkcionálneho programovania v jazyku Java
- Uzáver (closure) a jeho význam
- Rozdiely medzi rodinou jazykov LISP a jazykom Haskell
- Definícia a použitie funkcií v jazyku Clojure