456-0310/01 – Funkcionální a logické programování (FLP)
Garantující katedra | Katedra informatiky | Kredity | 6 |
Garant předmětu | prof. RNDr. Marie Duží, CSc. | Garant verze předmětu | prof. RNDr. Marie Duží, CSc. |
Úroveň studia | pregraduální nebo graduální | Povinnost | povinně volitelný |
Ročník | 2 | Semestr | zimní |
| | Jazyk výuky | čeština |
Rok zavedení | 2003/2004 | Rok zrušení | 2009/2010 |
Určeno pro fakulty | FEI | Určeno pro typy studia | navazující magisterské |
Cíle předmětu vyjádřené dosaženými dovednostmi a kompetencemi
Cílem předmětu je seznámit studenty s teoretickými i praktickými základy deklarativních programovacích jazyků
a naučit je zvládat programovací techniky založené na rekurzivních datových strukturách a rekurzi obecně.
Znalost logického programování, specielně Prologu, a funkcionálního programování v jazyce Haskell.
Vyučovací metody
Přednášky
Semináře
Individuální konzultace
Cvičení (v učebně)
Projekt
Anotace
Předmět je rozdělen do dvou samostatných celků. V části věnované funkcionálnímu programování bude výuka zaměřena na metody vycházející z lambda kalkulu, funkcí vyššího řádu a rekurze s využitím jazyka Haskell. Druhá část je zaměřena na logické programování a programovací techniky v jazyce Prolog.
Povinná literatura:
Materiály k programovacímu jazyku Haskell na http://www.haskell.org
Materiály k programovacímu jazyku Prolog na
http://www.swi.psy.uva.nl/projects/SWI-Prolog/
Mária Bieliková, Pavol Návrat: Funkcionálne a logické programovanie. FEI STU Bratislava, 1997.
Doporučená literatura:
Programming language Haskell: http://book.realworldhaskell.org/read/
Programming language Prolog: http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html
Další studijní materiály
Forma způsobu ověření studijních výsledků a další požadavky na studenta
Podmínky udělení zápočtu:
Vypracování dvou samostatných projektů, každý maximálně 15 bodů. Zápočtový test max. 15 bodů. Minimální počet bodů pro získání zápočtu = 25
E-learning
Další požadavky na studenta
Prerekvizity
Předmět nemá žádné prerekvizity.
Korekvizity
Předmět nemá žádné korekvizity.
Osnova předmětu
Přednášky:
Deklarativní programovací jazyky, význam funkcionálního a logického programování.
Lambda kalkul, konverze výrazů, operátor pevného bodu, rekurzivní funkce.
Funkcionální reprezentace dat - logické hodnoty, n-tice, kolekce, čísla.
Datové typy jazyka Haskell, definice uživatelských datových typů, abstrakce.
Definice funkcí, použití vzorů a unifikace, líné vyhodnocování.
Práce se seznamy, využití rekurze, nekonečné seznamy.
Dokazování funkcionálních programů, strukturální indukce.
Imperativní prvky ve funkcionálních programech, monády, reprezentace stavu výpočtu, vstup a výstup, výjimky.
Aplikace funkcionálního programování - denotační sémantika programovacích jazyků.
Aplikace funkcionálního programování - analýza textu.
Principy logického programování - substituce, klauzule, rezoluce.
Datové typy v Prologu - seznamy, n-tice. Uživatelské datové typy, stromy.
Základní programovací techniky logického programování. Vyhledávání, řazení.
Metaprogramování, práce s klauzulemi.
Programování s omezeními - jazyky typu CLP.
Projekty:
Projekt 1: Vypracování řešení zadaného problému funkcionální metodou a jeho implementace v jazyce Haskell.
Projekt 2: Specifikace řešení zadaného problému ve formě klauzulí predikátové logiky a jeho implementace v jazyce Prolog.
Počítačové laboratoře:
V rámci cvičení u počítače budou předváděny praktické ukázky funkcionálních a logických programů a budou procvičovány příklady rozšiřující a doplňující informace z přednášek.
Porovnání imperativních a deklarativního programování
Lambda kalkul, konverze výrazů, operátor pevného bodu, rekurzivní funkce.
Funkcionální reprezentace dat - logické hodnoty, n-tice, kolekce, čísla.
Datové typy jazyka Haskell, definice uživatelských datových typů, abstrakce.
Definice funkcí, použití vzorů a unifikace, líné vyhodnocování.
Práce se seznamy, využití rekurze, nekonečné seznamy.
Příklady na seznamy a rekurzi
Imperativní prvky ve funkcionálních programech, monády, reprezentace stavu výpočtu, vstup a výstup, výjimky.
Aplikace funkcionálního programování - denotační sémantika programovacích jazyků.
Aplikace funkcionálního programování - analýza textu.
Principy logického programování - substituce, klauzule, rezoluce.
Datové typy v Prologu - seznamy, n-tice. Uživatelské datové typy, stromy.
Základní programovací techniky logického programování. Vyhledávání, řazení.
Programovací jazyk Prolog.
Rekurze v Prologu.
Metaprogramování, práce s klauzulemi.
Programování s omezeními - jazyky typu CLP.
Podmínky absolvování předmětu
Výskyt ve studijních plánech
Výskyt ve speciálních blocích
Hodnocení Výuky