Zpět výuka
PRG005 Programování II
pondělí 12:20 M1
Základní kurs neprocedurálního programování pro studenty informatiky.
Obsah stránky:
Úkolem předmětu je seznámit studenty s ideami neprocedurálního programování a
vybavit je základními programovacími technikami logického a funkcionálního programování.
Přednáška má tři hlavní části:
- Hlavní část přednášky je věnována programování v Jazyce Prolog. V Prologu se také vytvářejí a ladí zápočtové úlohy.
- V druhé (velmi krátké) části přednášky se seznámíme se základy funkcionálního programování na bázi jazyka LISP. V seminářích (jednom nebo dvou) se přesvědčíte, že řadu obratů, které jste si osvojili v Prologu, velmi snadno přenesete do programování v LISPu.
Cílem této části je připravit půdu pro třetí část přednášky, LISP se u zkoušky nevyžaduje.
- Poslední část přednášky je věnována výkladu funkcionálního programování na bázi jazyka Haskell. Nepůjdeme do teoterických detailů jazyka, ale soustředíme se praktické programování v něm.
Zpět začátek
Zápočet uděluje studentovi vedoucí semináře, na který student chodí.
Pokud student nemůže ze závažných důvodů navštěvovat seminář se skupinou, kam patří,
musí se nejpozději do týdne
po zahájení výuky přihlásit do jiné skupiny
(o přijetí či nepřijetí rozhoduje vedoucí semináře, kam chce student přejít).
Pokud student (kombinovaného) studia nemůže ze závažných důvodů semináře navštěvovat,
dohodne si začátkem semestru náhradní podmínky udělení zápočtu s přednášejícím.
Získání zápočtu je podmínkou připuštění ke zkoušce.
Student může získat zápočet za splnění následujících požadavků :
- Aktivní účast na seminářích a průběžné znalosti během semestru.
- Vytvoření a odladění zápočtového programu v Prologu.
K zápočtovému programu je potřeba vytvořit smysluplnou dokumentaci.
Zpět začátek
- Rudolf Kryl: Úvod do programovacího jazyka Prolog
učební text - ke stažení z WWW stránek přednášejícího
aktuální verze 3.02 ve formátu pdf
nebo zip
Text byl původně napsán pro čtenáře s o poznání menší programátorskou erudicí, než má většina z Vás. Proto by mělo jít o "nenáročné čtení před usnutím". Text pokrývá přibližně první polovinu látky z Prologu. Obsahuje řadu jednoduchých programů.
Budu vděčný za připomínky a opravy chyb - posílejte je na můj mail a v subjectu uveďte číslo verze, ke které se připomínky vztahují.
- Paul Hudak, Joseph H. Fasel: A Gentle Introduction to Haskell
ke stažení z www.haskell.org
Poměrně čtivý základní text o programovacím jazyku Haskell. Pokrývá vše z jazyka, co probereme. Vzhledem ke zkrácení semestru možná některé partie vynecháme.
Půjdeme však podstatněji dál v programátorské obtížnosti úloh.
Na dané adrese můžete získat úplný přehled o problematice jazyka Haskell.
Zpět začátek
- P.Jirků a kol. : Programování v jazyku Prolog SNTL 1991
Pěkná knížkav češtině. Neobsahuje mnoho těžších příkladů,
věnuje se však dost podrobně souvislostem s logikou.
- Bratko I.: PROLOG Programming for Artificial Intelligence
Addison-Wesley, Reading, Massachussets, 1986 ISBN 0-201-14224-4
Stále velmi pěkná knížka. První díl obsahuje výklad Prologu (náš přístup k výkladu je do značné míry poplatný přístupu této knihy), druhý obsahuje výklad některých základních partií umělé inteligence pomocí programů v Prologu.
- Harold Abelson, Gerald Jay Sussman, Julie Sussman :
Structure and Interpretation of Computer Programs
Mc Graw-Hill Book Company 1985 ISBN 0-07-000-422-6
Výklad principů programování na bázi jazyka XSCHEME (dialekt jazyka LISP). Kniha byla používána v základnídním kursu programování na MIT.
My použijeme tohoto jazyka i příkladů z této knihy k velmi zběžnému seznámení s principy LISPu.
- Ivan Kalaš : Iné programovanie - stretnutie s jazykom Lisp
Alfa 1992
Krásná kniha s množství originálních příkladů. Uživaný dialekt LISPu se poněkud liší od toho, se kterým budeme pracovat na přednášce my.
Nutnou podmínkou připuštění ke zkoušce je předchozí získání zápočtu.
Vypsal jsem další termín 10.února od 8:00 v F2. Další termíny budou až po zahájení přednášek. Nemohu je vypisovat dříve než bude znám rozvrh. Zřejmě pak vypíši anketu o zájmu formou fiktivních termínů.
Bohužel jsou velmi časté případy, kdy se student přihlásí ke zkoušce aniž má reálnou jistotu, že získá zápočet, a neodhlásí se včas. Tím jsou termíny blokovány, ale fakticky se na ně nedostaví cca 15% zapsaných. Považuji to za velmi nekolegiální především k ostatním studentům (ale i ke mně - snažím se zvyšovat kapacitu zkoušením v sobotu). Na přednášce jsem říkal, že dávám přednost neuplatňování administrativních postihů. To však jde pouze tehdy, pokud se studenti jako kolektiv chovají rozumně (případné excesy jednotlivců se přežijí). Kdybych na situaci nijak nereagoval de facto bych přitakával těm, kteří se chovají nekolegiálně (pokud chcete, dalo by se říci i bezohledně).
Proto jsem zkrátil termín, do kterého se jde odhlásit, na tři dny před zkouškou. Studenti, kteří budou zapsáni a nebudou mít k danému dni zápočet, budou mít započten jeden neúspěch - neomluvená neúčast na zkoušce. Od ostatních, kteří se - ač zapsáni - nedostaví, budu chtít relevantní důvod proč se tak stalo.
Přihlašujte se až když je skutečně jisté, že zápočet získáte. Pochopitelně i nadále platí, že přijdete-li na zkoušku a bude volná kapacita, budete moci zkoušku skládat i když jste nebyli přihlášeni.
Zkouška má písemnou a ústní část, větší váhu má část písemná.
Písemná část se skládá také ze dvou částí
- krátká písemná práce na 120 minut
obsahuje 4 jednoduché příklady, v nichž má student prokázat, že ovládl základní techniku neprocedurálního programování
(u každého příkladu je předepsané,
zda má být řešen v Prologu
nebo Haskellu, případně i jak)
- vyřešení středně obtížného problému
na tuto část má student 90 minut, může si vybrat zda bude úlohu řešit
v Haskellu nebo v Prologu
Pokud nebude řečeno jinak předpokládá se vyřešení algoritmického jádra problému bez technických podrobností jako je např. vstup a výstup
I ústní část se skládá (jak jinak) ze dvou částí
- společná (zkoušející a zkoušený) oprava vytvořených programů a diskuse nad nimi
- Kromě toho může student dostat otázku z některého z následujících témat:
PROLOG
- Tvar programu v Prologu a jeho interpretace
- Deklarativní a operační sémantika programu v Prologu
- Operátor řezu
- Negace
- Práce se seznamy
- Reprezentace datových struktur (např. grafy, stromy, rozdílové seznamy)
- Vstup a výstup v Prologu, včetně definování operátorů.
- Predikáty pro řízení databáze (assert,...)
- Predikáty grupování termů (bagof, setof) a jejich užití
- Efektivita programů v Prologu
HASKELL
- Typy v Haskellu, typová specifikace funkce
- Základní způsoby definování výrazů, sémantika „mečování“ parametrů, as patterns ( @s ), žolíky ( _ ), lazy vyhodnocování, „nekonečné“ termy.
- Lambda abstrakce, používání jmen funkcí jako operátorů a naopak,
specializace operátorů { (např. (x+) }, definování priority a asociativity infixových operátorů.
- Třídy, podtřídy, instance.
- Pole v Haskellu.
Zpět začátek
Zpět výuka