Detail předmětu

Funkcionální a logické programování

FIT-FLPAk. rok: 2018/2019

Praktické aplikace a širší úvod do lambda kalkulu a predikátové logiky v prostředí funkcionálních a logických programovacích jazyků. V rámci funkcionálního programování jsou diskutovány abstraktní datové typy, použití rekurze a indukce, práce se seznamy a nekonečnými datovými strukturami v jazyce Haskell. V rámci logických jazyků základy programování v jazyce Prolog (operátor řezu, prohledávání stavového prostoru, změna databáze), Goedel, CLP a principy jejich implementace.

Výsledky učení předmětu

Studenti získají základní znalosti a praktické zkušenosti ve funkcionálním a logickém programování, což jsou významní představitelé deklarativního programování. Kromě toho obdrží základní informace o teoretických základech obou paradigmat a způsobu implementace.

Užití a zvládnutí rekurze pro algoritmizaci.

Prerekvizity

Způsoby zpracování (analýza, vyhodnocení/interpretace/překlad) programovacích jazyků, predikátová logika.

Doporučená nebo povinná literatura

  • Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
  • Nilsson, U., Maluszynski, J.: Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd., 1995
  • Hill, P., Lloyd, J.: The Gödel Programming Language, MIT Press, 1994, ISBN 0-262-08229-2
  • Bieliková, M., Návrat, P.: Funkcionálne a logické programovanie, Vydavateĺstvo STU, Vazovova 5, Bratislava, 2000.

  • Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
  • Nilsson, U., Maluszynski, J.: Logic, Programming and Prolog (2ed), John Wiley & Sons Ltd., 1995
  • Hill, P., Lloyd, J.: The Gödel Programming Language, MIT Press, 1994, ISBN 0-262-08229-2
  • Bieliková, M., Návrat, P.: Funkcionálne a logické programovanie, Vydavateĺstvo STU, Vazovova 5, Bratislava, 2000.
  • Jones, S.P.: Haskell 98 Language and Libraries, Cambridge University Press, 2003, p. 272, ISBN 0521826144

Způsob a kritéria hodnocení

Student musí během semestru získat alespoň 50% bodů z možného maxima, tj. 20 bodů ze 40.
Pokud bude odhaleno plagiátorství nebo nedovolená spolupráce na projektech, či u půlsemestrální zkoušky, zápočet nebude udělen a dále bude zváženo zahájení disciplinárního řízení.

Jazyk výuky

čeština

Osnovy výuky

    Osnova přednášek:
    1. Úvod do funkcionálního programování
    2. Lambda kalkul
    3. Programovací jazyk Haskell, úvod, práce se seznamy
    4. Uživatelské datové typy, typové třídy a pole v jazyce Haskell
    5. Vstupy/výstupy v jazyce Haskell - typové třídy IO a Monad
    6. Dokazování ve funkcionálním programování
    7. Denotační sémantika, implementace funkcionálních jazyků
    8. Prolog, úvod
    9. Seznamy, operátor řezu a řazení v jazyce Prolog
    10. Datové struktury, řetězce, operátory - rozšíření v jazyce SWI Prolog
    11. Stavový prostor, práce s klauzulemi a analýza jazyků v jazyce Prolog
    12. Goedel - logický programovací jazyk nevyužívající Hornovy klauzule
    13. Implementace logických jazyků, CLP, shrnutí, diskuse

    Osnova počítačových cvičení:
    1. Haskell - základní rysy jazyka, rekurze, seznamy, částečná aplikace, funkce vyššího řádu (map, filter, foldX), ukázka práce s nekonečným seznamem, zkrácené vyhodnocování
    2. Haskell - datové typy, monády, vstup/výstup
    3. Haskell - demonstrační cvičení - konstrukce jednoduchého interpretru s pomocí knihovny Parsec
    4. Prolog - struktura programu, rekurze, seznamy
    5. Prolog - dynamické predikáty, pokročilejší příklad
    6. Prolog - náročnější příklady, testování instanciace proměnných, prohledávání stavového prostor

    Osnova ostatní - projekty, práce:
    1. Jednoduchý program v jazyce Haskell (Hugs, GHC, GHCi).
    2. Jednoduchý program v jazyce Prolog/Gödel/CLP(R) (SWIPL, Gödel, CiaoProlog).

Cíl

Zvládnutí principů funkcionálního a logického programování jak prakticky tak i z pohledu formálních základů, které jsou při použití obou paradigmat využívány.

Vymezení kontrolované výuky a způsob jejího provádění a formy nahrazování zameškané výuky


  • Půlsemestrální zkouška - písemná, formou otázek a úkolů, neexistuje náhradní/opravný termín - 20 bodů.
  • Vypracování projektů - 2 projekty, jeden ve funkcionálním a druhý v logickém programovacím jazyce - jednoduché programy, dle zadání - 20 bodů celkem.
  • Závěrečná zkouška - písemná, formou otázek a úkolů, 2 opravné termíny (60 bodů - pro získání bodů ze zkoušky je nutné zkoušku vypracovat tak, aby byla hodnocena nejméně 25 body, v opačném případě bude zkouška hodnocena 0 body).

Zařazení předmětu ve studijních plánech

  • Program IT-MGR-2 magisterský navazující

    obor MBI , libovolný ročník, letní semestr, 5 kreditů, volitelný
    obor MMM , libovolný ročník, letní semestr, 5 kreditů, povinný
    obor MGM , libovolný ročník, letní semestr, 5 kreditů, povinně volitelný
    obor MPV , libovolný ročník, letní semestr, 5 kreditů, povinně volitelný
    obor MSK , libovolný ročník, letní semestr, 5 kreditů, volitelný
    obor MBS , 1. ročník, letní semestr, 5 kreditů, povinný
    obor MIS , 1. ročník, letní semestr, 5 kreditů, povinný
    obor MIN , 1. ročník, letní semestr, 5 kreditů, povinný
    obor MMI , 1. ročník, letní semestr, 5 kreditů, povinný

Typ (způsob) výuky

 

Přednáška

26 hod., nepovinná

Vyučující / Lektor

Osnova


  1. Úvod do funkcionálního programování
  2. Lambda kalkul
  3. Programovací jazyk Haskell, úvod, práce se seznamy
  4. Uživatelské datové typy, typové třídy a pole v jazyce Haskell
  5. Vstupy/výstupy v jazyce Haskell - typové třídy IO a Monad
  6. Dokazování ve funkcionálním programování
  7. Denotační sémantika, implementace funkcionálních jazyků
  8. Prolog, úvod
  9. Seznamy, operátor řezu a řazení v jazyce Prolog
  10. Datové struktury, řetězce, operátory - rozšíření v jazyce SWI Prolog
  11. Stavový prostor, práce s klauzulemi a analýza jazyků v jazyce Prolog
  12. Goedel - logický programovací jazyk nevyužívající Hornovy klauzule
  13. Implementace logických jazyků, CLP, shrnutí, diskuse

Cvičení na poč.

12 hod., nepovinná

Vyučující / Lektor

Osnova


  1. Haskell - základní rysy jazyka, rekurze, seznamy, částečná
    aplikace, funkce vyššího řádu (map, filter, foldX), ukázka práce s
    nekonečným seznamem, zkrácené vyhodnocování
  2. Haskell - datové typy, monády, vstup/výstup
  3. Haskell - demonstrační cvičení - konstrukce jednoduchého interpretru s pomocí
    knihovny Parsec
  4. Prolog - struktura programu, rekurze, seznamy
  5. Prolog - dynamické predikáty, pokročilejší příklad

  6. Prolog - náročnější příklady, testování instanciace proměnných,
    prohledávání stavového prostor

Projekty

14 hod., nepovinná

Vyučující / Lektor