460-2054/05 – Funkcionální programování (FPR)
Garantující katedra | Katedra informatiky | Kredity | 3 |
Garant předmětu | Ing. Marek Běhálek, Ph.D. | Garant verze předmětu | Ing. Marek Běhálek, Ph.D. |
Úroveň studia | pregraduální nebo graduální | | |
| | Jazyk výuky | čeština |
Rok zavedení | 2025/2026 | Rok zrušení | |
Určeno pro fakulty | FEI | Určeno pro typy studia | bakalářské |
Cíle předmětu vyjádřené dosaženými dovednostmi a kompetencemi
Základním cílem předmětu bude dovednost zapsat jednoduché algoritmy pomocí funkcionálního stylu programování. Přesněji řečeno, studenti pochopí rekurzi a vybrané rekurzivní datové struktury, budou schopni využívat funkce vyššího řádu, budou schopni definovat funkce pomocí techniky pattern matching. Budou schopni používat mechanismus zapouzdření pro funkce jako jsou uzávěry či modulární rozhraní a správně rozumět proměnným a jejich lexikálnímu rozsahu platnosti v programech. Na praktické úrovni budou schopni zapsat tyto základní algoritmy v programovacím jazyce Haskell. Navíc budou schopni rozpoznat funkcionální styl programování, pochopí výhody a nevýhody tohoto stylu programování a budou schopni porovnat tento styl programování s jinými přístupy, jako je imperativní nebo objektově orientované programování.
Vyučovací metody
Přednášky
Semináře
Individuální konzultace
Cvičení (v učebně)
Anotace
Předmět seznamuje s funkcionálním stylem programování. Zahrnuje základní vlastnosti funkcionálního programování, jako je programování bez vedlejších efektu, funkce jako hodnota prvního řádu, funkce vyšších řádů, rekurze, přizpůsobení, technika pattern matching nebo uzávěry funkcí. Rovněž kurz představuje vybrané datové struktury jako je seznam nebo strom a funkcionální styl práce s těmito strukturami. Jako programovací jazyk bude použit Haskell. Je to čistě funkcionální, staticky typovaný a líně vyhodnocovaný jazyk.
Povinná literatura:
Doporučená literatura:
Thompson S.: The Haskell: The Craft of Functional Programming (3nd ed.). Addison-Wesley Professional, October 2, 2011, ISBN-10: 0201882957.
Lipovaca M.:Learn You a Haskell for Great Good!: A Beginner's Guide (1st ed.). No Starch Press, San Francisco, CA, USA, 2011 - zdarma k dispozici na: http://learnyouahaskell.com/
Další studijní materiály
Forma způsobu ověření studijních výsledků a další požadavky na studenta
V předmětu budou probíhat přednášky a řízená cvičení na počítačové učebně. Studenti dále budou mít připravena cvičení k procvičování na doma. V průběhu semestru bude několik kontrolních testů. Hlavní část hodnocení budou představovat dva programovací testy. Ty budou probíhat na počítačové učebně a získání stanoveného minima bodů bude nutná podmínka k získání zápočtu.
E-learning
Základní materiály jsou dostupné na webu pedagoga: http://behalek.cs.vsb.cz/wiki/index.php/Functional_programming
Konzultace prostřednictvím MS Teams.
Další požadavky na studenta
Na studenty nejsou kladeny žádné další požadavky.
Prerekvizity
Předmět nemá žádné prerekvizity.
Korekvizity
Předmět nemá žádné korekvizity.
Osnova předmětu
Seznam přednášek
Základní úvod do funkcionálního programování
1. Úvod do kurzu. Úvod do funkcionálního programování. Úvod do programování v jazyku Haskell (pomocí interpretu GHC).
2. Základní definice funkce. Jak psát jednoduché (rekurzivní) funkce v jazyce Haskell. Základní datové typy a jejich použití.
3. Revize definice funkce: využití techniky pattern matching
4. Seznamy a n-tice - základní notace, jak je používat v programech.
5. Práce se seznamy.
6. Funkcí vyššího řádu. Funkce jako hodnota prvního řádu. Funkce map - fold. Generátory seznamů.
7. Uživatelsky definované datové typy a způsob práce s nimi.
8. Rekurzivní datové typy a polymorfismus, částečně vyhodnocené funkce, základní úvod do typových tříd.
Pokročilá témata
9. Teorie důležitá pro čistě funkcionální programování - úvod do lambda kalkulu, výpočet jako přepisování, líné vyhodnocení
10. Programování s akcemi - použití klasických polí a zpracování vedlejších efektů (vstupně výstupní operace).
11. Monády v jazyce Haskell
12. - 13. Funkcionální programování v tradičních jazycích - rozdíly mezi jazykem Haskell a jazyky jako C# nebo Java, reprezentace stavu pomocí monád z Haskellu (LINQ v jazyce C#).
Seznam cvičení (očekává se, že všechna cvičení budou v počítačových učebnách)
1. Interpret GHC - základní použití
2. Implementace základních funkcí pro výpočet např. faktoriálu, sekvence Fibonacciho čísel nebo největšího společného dělitele.
3. Funkce a operátory, které pracují s čísly, řetězci nebo znaky.
4. Implementace složitějších funkcí, které používají techniku pattern matching nebo chráněné výrazy.
5. Implementace funkcí, které pracují se seznamy jako: length, reverse, (++), zip, zipWith.
6. Použití standardních funkcí pracujících se seznamy jako map, fold, concat atd. Generátory seznamů.
7. První programovací test.
8. Definice datového typu pro matematické výrazy. Vyhodnocení těchto výrazů.
9. Definice binárního stromu. Implementace funkcí, které pracují s tímto stromem.
10. Práce se soubory
11. Práce s poli, generátor náhodných čísel - výpočet čísla PI.
12. Definice vlastní instance Monády v jazyce Haskell.
13. Druhý programovací test.
Podmínky absolvování předmětu
Podmínky absolvování jsou definovány pouze pro konkrétní verzi předmětu a formu studia
Výskyt ve studijních plánech
Výskyt ve speciálních blocích
Hodnocení Výuky
Předmět neobsahuje žádné hodnocení.