PRM046 Co bylo na přednáškách a cvičeních
přednáška čtvrtek 14:00 K1 , cvičení čtvrtek 12:20 K4
Domluvili jsme se, že i cvičení může posunovat látku kupředu, nejen procvičovat látku z přednášky.
Proto zde budeme uvádět i takový obsah cvičení
Stránku jsem začal psát až začátekem listopadu
- přednáška 2.října
- přednáška 9.října
- přednáška 16.října
- přednáška 23.října
- přednáška 30.října
- přednáška 6.listopadu
- přednáška 13.listopadu
- přednáška 20.listopadu
- přednáška 27.listopadu
Dosud mimo jiné bylo:
- Náplň kursu, podmínky pro zápočet, zkouška.
- Neprocedurální funkcionální, logické programování.
- Příklad jednoduchého programu v Prologu a dotazů na něj.
- Fakt, pravidlo, proměnná, anonymní proměnná.
- Definice seznamu a notace pro jejich zápis.
- Jednoduché predikáty pro práci se senamy, např.
prvek, první, poslední, předposlední prvek seznamu
vypuštění a vládání prvku ze a do seznamu,
permutace seznamu, zřetězení seznamů,
otáčení seznamu v kvadratickém čase, atd.
- Syntaxe Prologu (proměnné, atomy, řetězce, struktury, klausule, fakty, pravidla, procedury, ... ).
- Unifikace
- Algoritmus interpretu Prologu (unifikace + backtracking).
- Prostřední prvek seznamu (bez aritmetiky).
- Při zadaných faktech typu rodina(Otec,Matka,DetiOdNejstrsihoKNejmladsimu), muz(Kdo), zena(Kdo)
vytvorit predikaty
nejstBratr(Kdo, Koho), starsiBratr(Kdo, Koho), sestry(Koho, SeznamSester), bratranec(Kdo, Koho),
vsechnySestrenice(Koho, SeznSetrenic), atp.
- Tři řešení půlení seznamu - jedno neefektivní
- predikáty bytiseznamem(Co), prostySeznam(Zceho,Co), bytivybranou posloupnosti(Zceho, Vybr), zip(S1,S2,SezipS1aS2), atp
- Reprezentace matice jako seznamu řádkovych seznamů,
hlDiag(Matoce,HlDiag), bytiPrazdnouMatici(Matice)
- několik predikátů pracujících s maticemi:
otočení matice o 90 stupňů, slupka(Matice,Slupka,Pecka), spirala(Matice,Spirala),
byti_obdelnikovou(Mat),
- predikát "reverse_append" - otáčení seznamu v lineárním čase pomocí akumulátoru,
pojem akumulátoru
- Deklarativní a operační sémantika prologovské procedury
- Deklarativně správná procedura v čisém (pure) Prologu je parciálně správná v operačním smyslu
- Rozmyslet: chování čtyř (deklarativně ekvivalentních) variant procedury predek
- Aritmetika, predikát is,
aritmetické relace =:= , =/= , ‹ , › , ‹= , ›=
- Jednoduché aritmetické predikáty
- největší společný dělitel dvou čísel
- délka seznamu
- maximum dvou čísel, maximum z prvků seznamu čísel
- Maximální rostoucí začátek seznamu
- Binární stromy - jedna možná reprezentace
- Vyhledávání, vkládání a vypuštění prvku z binárního vyhledávacího stromu.
- Vkládání prvku do kořene binárního vyhledávacího stromu
- Vytvoření seznamu listů daného stromu - verze bez konkatenace
- Vytvoření seznamu prvků stromu v pořadí podle jejich vzdálenosti od listů (a je-listejná, pak odleva do prava)
- Průchody stromem do hloubky a do šířky
- quicksort s hlavou jako pivotem, varianta bez konkatenace
- Predikáty consult/1, reconsult/1, halt/0,
- Krabičkový model výpočtu odpovědi na dotaz. Princip ladění v Prologu, predikáty trace/0, notrace/0, spy/1, nospy/1.
- Standardní predikáty var/1, nonvar/1, atom/1, atomic/1, number/1, a pod.
- Standardní predikáty pro analýzu a syntézu termů:
name/2, functor/3, arg/3, =.. a příklady jejich užití.
- Rozdílové seznamy jako příklad datové struktury s volnou proměnnou, jejich zřetězování v konstatním čase
uvědomte si, nerekursivní implementace quicksortu již tuto ideu obsahovala
- "Smotávání" matice ze známé spirály - použití datové struktury z anonymních proměnných
- Predikát flatten
- Operátor řezu
- Třídění seznamu vkládáním
- Třídění seznamu výběrem
- Negace
- Řez ničí deklarativní sémantiku
- přednáška a cvičení 13.listopadu
-
cvičení a přednáška 20.listopadu
- odpovědi na dotazy
- slévání uspořádaných seznamů jako příklad deterministické procedury
- opětovná a podrobnější analýza algoritmu pro zjišťování bezpečnosti mobilů
- návod k úloze zjišťování mocniny permutace zadané pomocé seznamu cyklů
- Predikáty bagof a setof, "existenční kvantifikátor ^ ", jednoduché příklady užití.
- definování operátorů, predikát op/3, asociativita a priorita operátorů
příklady použití
- Princip možné implemenace programu Eliza (rozhovor s pacientem psychoanalitika)
- predikáty ovlivňující databázi: assert/1, retract/1, retractall/1
a jejich vliv na efektivitu programu
- modelování "globálních" proměnných pomocí assert a retract
- příklad na zjednodušování výrazů - součet členů typu +-K*A, kde K je číslo
- Připravte si případné dotazy k Prologu
- Zůstávají domácí úlohy z minulé přednášky
- Úlohy k procvičení programování v Prologu - vybetre si dle vlastní úvahy
- vytiskněte si definici základních forem jazyka SCHEME, kterým se budeme zabývat příští týden
k Prologu se ještě vrátíme
-
cvičení a přednáška 27.listopadu
Dialekt LISPu - SCHEME
Přehled základních předdefinovaných forem je v
materiálu
- Výrazy v LISPu - prefixový způsob zápisu, vyhodnocování expanzí a redukcí.
- Forma define
- Podmínky: formy cond a if, nil jako false.
- Příklady: efektivní umocňování, odmocnina newtonovou metodou.
- Funkce jako parametry - motivační příklad.
- Formy lambda a let, lokalita ve formě let.
- Dvojice : formy cons, car, cdr.
- Seznamy, forma list, příklady jednoduchých funkcí pro práci se seznamy.
- Programování jednoduchých úloh se seznamy
- Povídání o zápočtových úlohách
-
cvičení a přednáška 4.prosince
- Pokud jste tak ještě neučinili stáhněte si překladač SWI Prologu, abyste případně mohli položit dotazy
- Povídání o zápočtových úlohách,
Každý se musí do Vánoc se mnou domluvit na tématu a následně nejpozději do Silvestra poslat specifikaci programu.
Neodkládejte to však zbytečně.
- Opakování práce se seznamy v jazyku SCHEME
- Forma quote.
- Datová struktura = konstruktory + selektory (+metody).
- Implemenace zlomku jako příklad nutnost "inteligentních" konstruktorů a selektorů.
- Datová struktura binární strom, jednoduché programy s ní.
- Proč jseme mluvili o jazyku SCHEME
- Ještě naskok k Prologu:
- Rekapitulace technik, které má programátor v Prologu k dispozici k (pozitivnímu) ovlivňování složitosti programů.
- Několik verzí procedury počítající Fibonnaciho čísla, iterační verze
- Domluvili jsme se, že 18.prosince si napíšeme písemku z Prologu
Úvod do Haskellu
- Haskell jako funkcionální jazyk s typovou kontrolou.
- Definice funkce, typová specifikace funkce.
- Uživatelské definice typů. Typové a datové konstruktory.
Typová synonyma.
Polymorfické typy. Seznamy,
- dvě definice typu binární strom
- Práce s fukcemi více proměnných - curryfikace
- Stáhněte si materiál Paul Hudak, Joseph H. Fasel: A Gentle Introduction to Haskell
- cvičení a přednáška 11.prosince
- Opakování Haskellu
- Jednoduché příklady
- konstrukce let a where, dvojrozměrná syntaxe
- Funkce map, fold a foldr a příklady jejich použití
- Funkce v Haskellu nejsou striktní.
Objekt bot. Líné (lazy, by need) vyhodnocování funkcí - vyhodnocuj až když musíš
otvírá možnost definování nekonečných termů (jako zápisů algoritmů produkujících nekonečnou posloupnost výsledků,
z nichž však v každém konkrétním výpočtu potřebuji - a tedy budu počítat - jen konečně mnoho)
srovnej aktuální a petenciální nekonečno v matematice
- zkratky seznamů
- Definování seznamů pomocí generátorů a stráží. Výrazy pro aritmetické posloupnosti.
Podrobný výklad sémantiky výrazů tvaru [ e | q1 , q2 , ... ,qr ],
jednoduché příklady použití.
- Použití stráží v definicích funkcí
- Lambda abstrakce.
- Převod infixového operátoru na binární funkci a zpět. Řezy (sections).
- "Mečování" parametrů. Pořadí - odleva doprava a z vněšku dovniř,
Výsledkem mečování může být úspěch, selhání nebo divergence.
Formální parametry jako "vzorky" - patterns:
- proměnné
- As-patterns - '@'
- žolík - '_'
- datový konstruktor
- "aritmetický parametr" - "n+k"
- lazy patterns, příklady
- Dvě definice funkce , která vrací zadaný počet prvků ze začátku seznamu, které se liší mírou tolerance k chybě v prvním a druhém parametru.
- přednáška 19.května
Napíšeme v první "dvouhodině písemku, v druhé volný program