Neprocedurální programování (PRG005 - Informatici)
Cvičení se koná každý pátek od 10:40 v učebně S10 (Malá Strana). Na této stánce budou postupně uveřejňovány informace týkající se průběhu cvičení.
Cvičení 5.10.2007
Pro získání zápočtu je vyžadována aktivní účast na cvičení, napsání zápočtových písemek a
vytvoření zápočtového programu opatřeného dokumentací a testovacími daty (zápočtový program bude
upřesněn později podle požadavků přednášejícího).
Probírala se unifikace jako způsob předávání parametrů. Dále se probíraly jednoduché predikáty na
odpovídání, zda platí daný příbuzenský vztah za předpokladu, že platí fakta uvedená v databázi faktů. Průběh
vyhodnocování dotazů pro příbuzenské vztahy - backtracking. Reprezentace stromu rekurzivní strukturou
t(levy_podstrom, hodnota, pravy_podstrom), predikát na zodpovězení, zda se zadaná hodnota nachází v zadaném stromu.
Testování správně formované struktury strom. Unární reprezentace přirozených čísel (a nuly) pomocí struktury následník
(např. číslo 3 je reprezentováno pomocí struktury s(s(s(0)))). Testování správně formovaného čísla, aritmetické operace
nad unární reprezentací čísel.
Cvičení 12.10.2007
Aritmetika nad unární reprezentací přirozených čísel (a nuly) - operace sčítání, opatrné odčítání a násobení.
Různé varianty dotazů pro aritmetické operace - plus(+,+,-) (známe sčítance, neznáme výsledek operace), plus(-,-,+)
(neznáme sčítance, známe výsledek operace), plus(-,+,+) (neznáme prvního sčítance, známe druhého sčítance a výsledek operace).
Základy práce se seznamy, unifikace konstrukce [X|Y]. Připojení seznamu na konec jiného seznamu - append, generování
všech permutací seznamu, transpozice matice reprezentované jako seznam seznamů.
Cvičení 19.10.2007
Aritmetická operace plus pro módy plus(-,-,+). Generování všech permutací seznamu. Transpozice matice. Základní
operace se seznamy. Sjednocení seznamů. Průnik seznamů. Palindrom (seznam čtený popředu i pozpátku stejně), otočení seznamu.
Akumulátor na zeefektivnění operace otáčení seznamu. Slévání seznamu seznamů do jednoho seznamu. Rozdělení seznamu na
sudé a liché prvky (podle pozic). Mailové domácí úkoly (na cv. se nebude předvádět): variace, kombinace seznamu, bez opakování a s opakováním. Klasický
domácí úkol (bude se předvádět na cv.): binární vyhledávací strom - member, insert, delete (klasický dcv. lze i mailově).
Cvičení 26.10.2007
První zápočtová písemka se bude psát 9.11.2007. Náplní písemky budou podobné úlohy, jako se probírají
na cvičení. Rozhas písemky bude vše, co bylo až do termínu písemky probráno (na cvičení i přednášce).
Transpozice matice. Binární vyhledávací strom - insert, member, delete. Aritmetické operace. Výpočet faktoriálu,
Fibonacciho čísla, největšího společného dělitele, počet transpozic v seznamu čísel. Reprezentace 2-regulární
haldy - operace vložení prvku a odebrání minimálního prvku. Reprezentace grafu s ohodnocenými vrcholy. Barvení grafu.
Cvičení 2.11.2007
Úlohy na prohledávání stavového prostoru. Barvení grafu. Přelévání vody - dáno několik nádob celočíselných objemů, úkolem je
odměřit zadaný objem. Vlk, koza, zelí, převozník, převážení na druhý břeh. Obecné barvení grafu (hrany nejsou jen nerovnosti, ale
také další relace na uspořádání). Proskákání šachovnice koněm, N neohrožujících se královen na šachovnici velikosti NxN.
Cvičení 9.11.2007
Slibovaná zápočtová písemka se skutečně psala. Na následujícím odkazu je její zadání.
První (zápočtová) písemka - zadání (pdf formát)
Cvičení 16.11.2007
Další úlohy na prohledávání stavového prostoru. Vyhodnocování a splňování Booleovských formulí v CNF formě.
Dále se procvičovalo použití řezu. Ukázka paradoxního chvání vyhodnocování dotazů pro různá umístění řezu v programu.
Za domácí úkol zbyla úloha o hledání pozic pro N neohrožujících se královen na šachovnici velikosti NxN.
Cvičení 23.11.2007
Procvičování definic operátorů. Množinové oprátory. Řešení těžkých úloh (z hlediska výpočetní složitosti) v Prologu -
součet podmnožiny, Lloydova osmička (patnáctka). Plánování ve světě kostek - klasické STRIPS plánování, kde akce je trojice
množin atomů (předpoklad, pozitivní efekt, negativní efekt).
Cvičení 30.11.2007
Ještě jsme se chvíli zabývali plánováním. Pak jsme začali Scheme, jednoduché úlohy - faktoriál, Fibonacciho číslo,
kombinační číslo. Seznamy ve Schemu - délka seznamu.
Cvičení 7.12.2007
Procvičoval se Scheme. Numerické úlohy ve Schemu - numerické počítání derivace, numerické integrování, numerické
hledání nulových bodů funkce (Newtonova metoda). Základní funkcionální techniky - zpracování struktury pomocí unární operace (map),
pomocí binární operace (fold). Domácí úkol: filrace signálu, transpozice matice a vyhledávání ve stromu.
Cvičení 14.12.2007
Další úlohy ve Schemu. Transpozice matice, filtrace signálu, vyhledávání ve stromu. Začal se procvičovat Haskell.
Základní úlohy - Fibonacciho číslo, faktoriál, maticové násobení, transpozice matice.
První cvičení po Vánocích (tj. 4.1.2008) se bude psát další zápočtová písemka.
Cvičení 4.1.2008
Psala se druhá zápočtová písemka. Zadání písemky bude zveřejněno později.