Detail předmětu
Funkcionální a logické programování
FIT-FLPAk. rok: 2022/2023
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.
Jazyk výuky
Počet kreditů
Garant předmětu
Zajišťuje ústav
Výsledky učení předmětu
Užití a zvládnutí rekurze pro algoritmizaci.
Prerekvizity
Způsob a kritéria hodnocení
- Půlsemestrální zkouška, u které neexistuje náhradní, či opravný termín.
- Vypracování 2 projektů v průběhu semestru a jejich odevzdání ve stanoveném termínu.
Učební cíle
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).
Základní literatura
Doporučená literatura
Jones, S.P.: Haskell 98 Language and Libraries, Cambridge University Press, 2003, p. 272, ISBN 0521826144
Klabnik, S., Nichols, C., Krycho, C., et al: The Rust Programming Language, Online, 2025, dostupné z: https://doc.rust-lang.org/book/ . [citováno 2025-12-04]
Podklady k přednáškám (slajdy, ukázky, ...)
Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
Elearning
Zařazení předmětu ve studijních plánech
- Program IT-MGR-2 magisterský navazující
obor MBI , 0 ročník, letní semestr, volitelný
obor MBS , 1 ročník, letní semestr, povinný, je součástí profilujícího základu
obor MIN , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
obor MIS , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
obor MMM , 0 ročník, letní semestr, povinný, je součástí profilujícího základu
obor MSK , 0 ročník, letní semestr, volitelný - Program MITAI magisterský navazující
specializace NADE , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NBIO , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NCPS , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NEMB , 0 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NGRI , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NHPC , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NIDE , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NISD , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NISY do 2020/21 , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NMAL , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NMAT , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NNET , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NSEC , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NSEN , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NSPE , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NVER , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NVIZ , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
specializace NISY , 1 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu - Program IT-MGR-2 magisterský navazující
obor MGM , 0 ročník, letní semestr, povinně volitelný
obor MPV , 0 ročník, letní semestr, povinně volitelný - Program MITAI magisterský navazující
specializace NEMB do 2021/22 , 0 ročník, letní semestr, povinný, základní teoretický předmět profilujícího základu
Typ (způsob) výuky
Přednáška
Vyučující / Lektor
Osnova
- Úvod do funkcionálního programování
- Lambda kalkul
- Programovací jazyk Haskell, úvod, práce se seznamy
- Uživatelské datové typy, typové třídy a pole v jazyce Haskell
- Vstupy/výstupy v jazyce Haskell - typové třídy IO a Monad
- Dokazování ve funkcionálním programování
- Denotační sémantika, implementace funkcionálních jazyků
- Prolog, úvod
- Seznamy, operátor řezu a řazení v jazyce Prolog
- Datové struktury, řetězce, operátory - rozšíření v jazyce SWI Prolog
- Stavový prostor, práce s klauzulemi a analýza jazyků v jazyce Prolog
- Goedel - logický programovací jazyk nevyužívající Hornovy klauzule
- Implementace logických jazyků, CLP, shrnutí, diskuse
Cvičení na počítači
Vyučující / Lektor
Osnova
- 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í
- Haskell - datové typy, monády, vstup/výstup
- Haskell - demonstrační cvičení - konstrukce jednoduchého interpretru s pomocí knihovny Parsec
- Prolog - struktura programu, rekurze, seznamy
- Prolog - dynamické predikáty, pokročilejší příklad
- Prolog - náročnější příklady, testování instanciace proměnných, prohledávání stavového prostor
Projekt
Vyučující / Lektor
Osnova
- Jednoduchý program v jazyce Haskell (Hugs, GHC, GHCi).
- Jednoduchý program v jazyce Prolog/Gödel/CLP(R) (SWIPL, Gödel, CiaoProlog).
Elearning