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
  • Funktory, aplikatívne funktory a monády
  • 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