Zpět výuka LS 2012/13

PRG005 Neprocedurální programování

Základní kurs neprocedurálního programování pro studenty informatiky.

přednáška - úterý 10:40 S3

můj seminář rozvržen úterý 14:00 S6

Obsah a cíle předmětu

Ú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:
Zpět začátek

Podmínky pro získání zápočtu

Student může získat zápočet za splnění dvou požadavků :

Získání zápočtu je podmínkou připuštění ke zkoušce.
Vzhledem k množství studentů nebude umožněno se ke zkoušce přihlásit dokud nebudete mít zápočet. Není to však prakticky žádné omezení. Jazyk Prolog se úplně probere na 5-7 prvních přednáškách.

Podmínky pro udělení zápočtu upřesňuje a kontroluje vedoucí semináře, na který student chodí. Při přebírání zápočtového programu se zpravidla vhodným způsobem přesvědčí zda student program vytvořil sám (např. může požadovat provedení drobných změn v programu v reálném čase).

Pokud student (kombinovaného) studia nemůže 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.

Zpět začátek

Literatura:

Základní literatura (bude ještě doplněna):

  1. 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.03 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 název textu a číslo verze, ke které se připomínky vztahují.
  2. Přehled předdefinovaných forem ve vykládaném dialektu LISPu
    Ke stažení ve formátu pdf
  3. Pěkná základní online učebnice. Je ale určena čtenářům, kteří mají o hodně menší programátorské schopnosti a zkušenosti než Vy. V podstatě tam nejsou složitější příklady. Mnohdy také řešení (jednoduché) úlohy je vlastně jen použitím nějaké vhodné knihovní funkce. Na zkoušce budu požadovat, abyste úlohy i tyto funkce naprogramovali nebo to udělali jinak základními prostředky jazyka.
  4. ke stažení z www.haskell.org
    Poměrně čtivý základní text o programovacím jazyku Haskell (jeho starší verzi). Pokrývá většinu toho, co probereme. Některé partie vynecháme, půjdeme však podstatně dál v programátorské obtížnosti úloh.
  5. přesná definice jazyka - není na běžné čtení, ale můžete použít jako zdroj informaxcí o daném konkrétním rysu jazyka i jako zdroj pěkně napsaných definicí funkcí.
  6. Na dané adrese můžete získat úplný přehled o problematice jazyka Haskell a stáhnout si prostředí.
Zpět začátek

Doplňková literatura (není nutná)

  1. P.Jirků a kol. : Programování v jazyku Prolog
    SNTL 1991
    Pěkná knížka v češtině. Neobsahuje mnoho těžších příkladů, věnuje se však dost podrobně souvislostem s logikou.
  2. 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.
  3. 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.
  4. 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.
Zpět začátek

Překladač prologu SWI

K ladění zápočtových programů a experimentům v Prologu doporučuji překladač SWI Prolog. Jde o volně stažitelný výborný překladač, který je k dispozici pro všechny platformy. Obecně lze experimenty s jazykem vřele doporučit, možná však je dobré počkat až z přednášky a seminářů ovládnete základy jazyka. Na třetí nebo na čtvrté přednášce si o práci s tímto překladačem řekneme více.

Zpět začátek

Informace o zkoušce

Nutnou podmínkou připuštění ke zkoušce je předchozí získání zápočtu.
Ke zkoušce se studenti přihlašují v SISu.
Ke zkoušce se můžete přihlásit jen když již máte zápočet udělen (t.j. zapsán v SISu).
Pokud je volná kapacita může zkoušku skládat i ten, kdo nebyl přihlášen.
V den a v hodinu uvedenou v systému SIS se píše písemná část zkoušky. Po jejím zkoušení bude vypsán rozpis, podle kterého budou studenti skládat část ústní. Z pravidla to bude týž den odpoledne nebo druhý den. Pokud bude termín plně obsazen, může se ústní zkouška konat i v některém z dalších dnů.
 
Je žádoucí absolvovat první (a v optimálním případě i poslední) termín do prázdnin. V září budu zkoušet, ale nemusí se Vám podařit abslvovat tři pokusy (a pokud se většina bude chovat nerozumně, pak třeba ani dva).

Požadavky ke zkoušce

Zkouška má písemnou a ústní část, větší váhu má část písemná.

Písemná část

se skládá ze dvou částí:
  1. Technická - čas 120 minut (bude ještě upřesněno)

    Bude obsahovat (algoritmicky) jednoduché úlohy na programování v Prologu a Haskellu.
  2. Programátorská - 90 minut

    Úkolem bude vyřešit v Haskellu středně obtížnou úlohu, požaduje se volba vhodných datových struktur, rozumného algoritmu a vytvoření odpovídajícího kódu v Haskellu.
    Složitost zvoleného algoritmu nemusí být optimální, ale nesmí být neúnosně velká.
    Haskell je pro tuto část předepsán proto, že naprostá většina studentů řeší zápočtovou úlohu v Prologu.

Součástí řešení úloh v písemné části nemusí být vstup a výstup, ale "jen" algorimická část řešení.
U všech funkcí v Haskellu je nutné napsat jejich typovou specifikaci.
Není nutné znát předdefinované funkce v Haskellu, ale pokud je budete používat je nutné je naprogramovat,
Je nutné (alespoň pasivně) znát základní konstrukce pro definování typů, funkcí a tříd v Haskellu, abyste byli schopni odpovídat na otázky typu "co dělá tato funkce" resp. " je daná definice dobře?" a pod.
V obou částech písemné práce se požadují taková řešení, která vycházení z principů neprocedurálního programování, za správná nebudou uznána taková, která jsou založena tom, jak tyto principy obejít.

Ústní část zkoušky se skládá

Témata pro ústní zkouškut :

Zpět začátek