456-0310/01 – Funkcionální a logické programování (FLP)

Garantující katedraKatedra informatikyKredity6
Garant předmětuprof. RNDr. Marie Duží, CSc.Garant verze předmětuprof. RNDr. Marie Duží, CSc.
Úroveň studiapregraduální nebo graduálníPovinnostvolitelný odborný
Ročník1Semestrletní
Jazyk výukyčeština
Rok zavedení2003/2004Rok zrušení2009/2010
Určeno pro fakultyFEIUrčeno pro typy studianavazující magisterské
Výuku zajišťuje
Os. čís.JménoCvičícíPřednášející
BEH01 Ing. Marek Běhálek, Ph.D.
MEN059 Mgr. Marek Menšík, Ph.D.
Rozsah výuky pro formy studia
Forma studiaZp.zak.Rozsah
prezenční Zápočet a zkouška 2+2
kombinovaná Zápočet a zkouška 2+2

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

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

Prezenční forma (platnost od: 1960/1961 letní semestr, platnost do: 2008/2009 letní semestr)
Název úlohyTyp úlohyMax. počet bodů
(akt. za podúlohy)
Min. počet bodů
Zápočet a zkouška Zápočet a zkouška 100 (100) 51
        Zkouška Zkouška 55 (55) 26
                Zkouškový test Písemná zkouška 55  26
        Zápočet Zápočet 45 (45) 25
                Projekt - funkcionální programování Projekt 15  0
                Projekt - logické programování Projekt 15  0
                Zápočtový test Písemka 15  0
Rozsah povinné účasti:

Zobrazit historii

Výskyt ve studijních plánech

Akademický rokProgramObor/spec.Spec.FormaJazyk výuky Konz. stř.RočníkZLTyp povinnosti
2009/2010 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 1 volitelný odborný stu. plán
2009/2010 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 1 volitelný odborný stu. plán
2008/2009 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 1 volitelný odborný stu. plán
2008/2009 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 1 volitelný odborný stu. plán
2008/2009 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán
2007/2008 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 2 povinně volitelný stu. plán
2007/2008 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán
2007/2008 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 1 volitelný odborný stu. plán
2007/2008 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 1 volitelný odborný stu. plán
2006/2007 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 2 povinně volitelný stu. plán
2006/2007 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán
2006/2007 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 1 volitelný odborný stu. plán
2006/2007 (N2647) Informační a komunikační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 1 volitelný odborný stu. plán
2005/2006 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 2 povinně volitelný stu. plán
2005/2006 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán
2004/2005 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 2 povinně volitelný stu. plán
2004/2005 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán
2003/2004 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika P čeština Ostrava 2 povinně volitelný stu. plán
2003/2004 (N2646) Informační technologie (2612T025) Informatika a výpočetní technika K čeština Ostrava 2 povinně volitelný stu. plán

Výskyt ve speciálních blocích

Název blokuAkademický rokForma studiaJazyk výuky RočníkZLTyp blokuVlastník bloku