Základní kurs neprocedurálního programování pro studenty informatiky.
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:
- 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 spíše na praktické programování v něm.
Podmínky pro získání zápočtu
Student může získat zápočet za splnění dvou 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. Součástí předávaného programu musí být i zkušební ladící data. Jejich volba je součástí toho, co se na programu hodnotí.
Získání zápočtu je podmínkou připuštění ke zkoušce.
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 programuv reálném
čase).
Pokud student nemůže ze závažných důvodů navštěvovat seminář se skupinou, kam podle rozvrhu patří,
musí se nejpozději do dvou týdnů 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.
Kriteriem je udržení přibližně stejně velkých skupin.
Studenti, kteří se nepřihlásí (resp. nebudou přijati) na žádný ze
seminářů do 30.10.2004 zařadí do skupin přednášející a pokud nebudou
mít pro opoždění skutečně vážný důvod, dostanou jednu úlohu na zápočet
navíc.
Pokud jste se zúčastnili některého semináře se skupinou, do které nebudete chodit, dejte to vedoucímu cvičení na vědomí.
V souboru jsou uvedeny aktuální počty studentů ve skupinách k 10.listopadu.
Podle počtu studentů byl každému ze seminářů přidělen statut. Jejich význam je následující:
- uzavřeno - nelze již přijímat nové studenty
- otevřeno - přijímaní dalších studentů není žádoucí
- volné - přijímání dalších studentů je žádoucí
- velmi volné - přijímání dalších studentů je velmi žádoucí
- přeplněno - je nutné snížit počet studentů na nejvýše 24 resp. 25
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.
Literatura:
Základní literatura:
-
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í.
-
Přehled předdefinovaných forem ve vykládaném dialektu LISPu
Ke stažení ve formátu pdf
-
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.
Některé partie vynecháme, půjdeme však podstatně dál v programátorské obtížnosti úloh.
Na dané adrese můžete získat úplný přehled o problematice jazyka Haskell.
Doplňková literatura (není nutná)
-
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.
-
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.
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.
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 přihlašujete ve studijním informačním systému.
Přihlašujte se až když již zápočet skutečně máte,
jinak byste blokovali kapacitu termínů studentům, kteří na rozdíl od Vás zkoušku skládat mohou.
Jde tedy o elementární slušnost k ostatním.
Jen velmi nerad bych takové rozumné a ohleduplné chování vynucoval administrativními metodami
(které již z definice musí být slepě tvrdé, musel bych např. zakázat odhlašování od zkoušky).
Uchýlil bych se k nim jen kdybyste mě k tomu donutili.
Studenty, kteří se na termíny již přihlásili, aniž měli zápočet, jsem odhlásil.
Nehodlám však nadále takové nedostatky funkční gramotnosti studentů napravovat
(Funkční gramotnost = schopnost porozumět krátkému textu v příslušném přirozeném jazyce
a schopnost zachovat se adekvátně tomuto porozumění) .
Není třeba být nervozní, termínů bude - zvláště ve zkouškovém období - dost.
Pokud by již vypsané termíny nestačili, nějaké doplním.
U některých termínů půjde zvednout i kapacita - to se však netýká předtermínu.
Pochopitelně přijdete-li na zkoušku a bude volná kapacita, budete moci zkoušku skládat i když jste nebyli přihlášeni.
I když to nebudu nijak administrativně vynucovat, je rozumné naplánovat si práci tak,
abyste mohli zkoušku (jednou - většině to snad bude stačit) absolvovat do konce zkouškového období zimního semestru.
Během semestru budou termíny také, ale pochopitelně vhledem k obsazenosti poslucháren v podstatně menším počtu.
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á také ze dvou částí
- první písemná práce na 90 minut
obsahuje 4-5 jednoduchých příkladů, v nichž má student prokázat, že ovládl základní techniky 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).
- druhá písemná práce na 120 minut
obsahuje dvě středně obtížné úlohy, v nichž má student prokázat, že umí programovat jak Prologu, tak v Haskelu.
Zpravidla si student může vybrat, který problém bude řešit v Prologu a který v Haskellu.
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.
Ústní část zkoušky se skládá
- ze společné (zkoušející a zkoušený) opravy vytvořených programů a diskuse nad nimi
- ze zodpovězení otázekz některého z dále uvedených témat
Témata pro ústní zkoušku :
- 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)
- Edinbugrský model vstupu a výstupu.
- Definování a použití 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-parametry ( ˜x ),
- 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říd, instance.
- Pole v Haskellu.