Ladění, pred. vyšších řádů (7)  Jan Hric, KTI MFF UK,1997-2010a

Slides:



Advertisements
Podobné prezentace
LOGISTICKÉ SYSTÉMY 14/15.
Advertisements

DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Iterativní algoritmy pro Gaussovské grafické modely Implementace do SW Mathematica Vladislav Chýna.
Dynamické systémy.
Tomáš Petříček Microsoft C# MVP
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Programování funkcí v Excelu (pole)
Prolog – seznamy Jan Hric, 1997 – 2010b KTIML MFF UK URL:
MATLAB LEKCE 7.
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Seznamy v jazyce Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Pascal - větvení.
Opakování Co je výsledkem následujícího prográmku? my $a="kol"; my $b="o"; $a.= $b; $b.= $a; print "a = $a, b = $b\n"; Vkládání speciálních znaků? Uvozovací.
LOGISTICKÉ SYSTÉMY 6/14.
Ekvivalence následujících tří úloh
Programovací jazyk Prolog
Neprocedurální programování Prolog 1.přednáška
Programování v C++ Cvičení.
Principy překladačů Mezikód Jakub Yaghob.
Programování v Pascalu Přednáška 7
Programování PA - 2.
Generování mezikódu Jakub Yaghob
FORMALIZACE PROJEKTU DO SÍŤOVÉHO GRAFU
LOGISTICKÉ SYSTÉMY 7/14.
Řešení dynamických problémů s podmínkami Pavel Surynek Univerzita Karlova v Praze Matematicko-fyzikální fakulta.
Informatika I 3. přednáška
Algoritmizace a základy programování
JUI - 9. přednáška Ř ez, negace, práce s databází RNDr. Jiří Dvořák, CSc.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Algoritmy vyhledávání a řazení
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Predikátová logika.
Počítače a programování 1
JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc.
Reprezentace (6)  Jan Hric, KTI MFF UK, a
Přednáška 10 Logické programování, PROLOG (PROgramming in LOGic)
Datové typy a struktury
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Souvislost amerického a evropských akciových trhů Za pomoci grafických modelů v SW Mathematica Vladislav Chýna Setkání uživatelů systému Mathematica
Programovací jazyk Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
P-těžké, np-těžké a np-úplné problémy
MS Excel 2 Martin Kotlík Brno, 20. ledna 2015 Obsah předchozího semináře 1 1.Popis programu Excel 2.Základní dovednosti 3.Typy vkládaných dat 4.Formát.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
Vestavěné predikáty a jejich použití (5) Jan Hric, KTI MFF UK, a
Vestavěné predikáty a jejich použití Jan Hric, KTI MFF UK c (oprava 4.5.)
Seznamy v jazyce Haskell Ing. Lumír Návrat  katedra informatiky, D-403 
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Prolog (add) Jan Hric, KTI MFF UK, a
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Programovací jazyk C# 4. část - cykly.
Definiční obor a obor hodnot
PROLOG strategie vyhodnocení dotazu
Programovací jazyk Haskell
MU002 – Informační technologie Základy algoritmizace 5/13
Sémantika PL1 Interpretace, modely
Predikátová logika.
Rozvoj IT kompetencí Pavla Kovářová.
Prohledávání stavového prostoru
Grafy kvadratických funkcí
Algoritmizace a datové struktury (14ASD)
Prohledávání grafů.
Grafy kvadratických funkcí
Transkript prezentace:

Ladění, pred. vyšších řádů (7)  Jan Hric, KTI MFF UK, a

Ladění  Krabičkový model  4 brány:  Call: první zavolání cíle  Exit: úspěšné ukončení cíle  Redo: návrat do cíle, hledání alternativ  Fail: celkový neúspěch  vstupní brány: Call, Redo  výstupní: Exit, Fail

Ladění II - predikáty  trasování (taky v menu):  trace/0 zapne  notrace/0 vypne  spypointy:  spy(P/N) nastaví spypoint  nospy(P/N) zruší -”-  ladění pomocí spypointů (i v menu)  debug/0 zapne ladění  nodebug/0 vy pne ladění  debugging/0 vy píše nastavení

Práce s množinami řešení  převod reprezentací: backtracking na seznam řešení  setof(Term, Cil, Seznam)  Pro každou nalezenou substituci S, která splňuje Cil, se d.s. S( Term ) přidá do Seznam u  najde všechny hodnoty Term u (s aplikovanou subs. S), které splňují Cil  vráti jejich Seznam, uspořádaný, bez duplicit  Seznam je vždy neprázdný, při prázdném výsl. seznamu setof/3 neuspěje  backtrackuje přes volné proměnné v Cíli  Cíl tvaru V1^V2^...^C (pouze zde: setof, bagof)  V1,V2,... jsou existenčne kvantifikované, na jejich hodnotách nezáleží, nebacktrackuje sa přes ně  Cíl může být složený (v závorkách)  bagof/3  analogicky, vrací neuspořádanou multimnožinu řešení (bag)  findall/3  Všechny proměnné jsou existenčně kvantifikované, uspěje jednou

setof – příklady chování ?- setof(R, D^rodic(R,D), L).% existenční proměnná D L=[adam,anna,bohus,bozena] ; no ?- setof(R, rodic(R,D), L).% backtracking pro různé hodn. D L=[adam,anna] ;%{D=bohus} L=[adam,anna] ;%{D=bara} L=[bohus,bozena] ; %{D=cyril} no ?- setof(M+O, D^(rodic(M,D),rodic(O,D),M\=O),L).% struktura L=[adam+anna,anna+adam,bohus+bozena,bozena+bohus] ; no ?- bagof(R, D^rodic(R,D), L).% bag L=[adam,anna,adam,anna,bohus,bozena] ; no rodic(anna,bohus).% jeden fakt procedury rodic/2 rodic(adam,bohus).% význam: Adam je rodicem Bohuse rodic(anna,bara). rodic(adam,bara). rodic(bohus,cyril). rodic(bozena,cyril).

Příklad - setof  reprezentace grafů: graf([V-OV],[h(V1,V2,OH)]  interface: vrchol/3, hrana/4 vrchol(graf(Vs,_Hs),V,OV) :-member(V-OV,Vs). hrana(graf(_Vs,Hs),V1,V2,OH):-member(h(V1,V2,OH),Hs).  druhá reprezentace: [V1-OV-[V2-OH]] prevod(G1,G2):- setof(V1-OV-Vs, (vrchol(G1,V1,OV),setof(V2-OH,hrana(G1,V1,V2,OH),Vs)), G2).  DC: dopracujte, aby G2 obsahoval i izolované vrcholy  Použití existenčne kvantifikovaných proměnných: sousede(G1,V,S):-setof(V2,OV^hrana(G1,V,V2,OV),S).  Pro setof(V2,hrana(G1,V,V2,_),S) backtrackuje přes různé hodnoty ohodnocení a teda vrací nevhodné výsledky

Metoda “generuj a testuj”  použití: prohledávací úlohy, využijeme prologovské prohledávání (do hloubky)  př.: obarvení grafu n barvami, tvorba krížovky, kombinatorické problémy...  posbírat rozumná řešení pomocí setof  musí být “málo řešení”  NP-úplné problémy lehko popíšete, ale … batoh(Bs,S,Os):- % najít podmnožinu Bs, že její součet je S subset(Os,Bs), suma(Os,S).  problém: obvykle neefektivní postup  generovat po částech a hned testovat, co se dá

Převod termu na cíl: call/1  call/1 převede term v argumentu na cíl a zavolá ho  akceptuje i složené cíle  jméno volaného predikátu musí být známé  proměnné na místě predikátů: převod: X --> call(X)  cíl lze zkonstrovat za běhu (ze známých pred.) => „late binding“, „hooks“  př.: not, \+, setof, …  not(X):-call(X),!,fail;true.  př.: sekvence(P,Q):- call(P),call(Q).  př.: sekvence2(P,Q):- call((P,Q)).  argumenty se přidají pomocí =..  problémy s přejmenováním proměnných  => používat jen na termy bez proměnných (zatím)  Mimo standard: call/n, přidá další argumenty a zavolá  Př.: call(append([X]),I,O), jako append([X],I,O)  Nepřejmenuje proměnné ve volaném cíli -> ručně: copy_term(Term,T0)

Programování vyšších řádů  predikáty (jména p.) jako vstupní parametry, (tj. pointry na p.)  znovupoužitelnost kódu, vyšší abstrakce  parametrické spracování seznamu: map(Pred, In, Out)  Pred/2 se zavolá na každý prvek In a vrátí prvek Out  př.: první, poslední sloupec matice map(_P,[],[]). map( P,[I|Is],[O|Os]):- mycall(P,[I,O]),map(P,Is,Os). % nebo: call(P,I,O) posledni_sloupec(M,S):-map(last,M,S). last(L,Last):-append(_,[Last],L).  argumenty se přidají pomocí =..,anebo použít call/n, n>1 (SWI) mycall(P,Args):- C=..[P|Args], call(C).  P je 1 jméno predikátu (ne složený cíl),  Volané cíle jsou pojmenované predikáty v db.  idea map je použitelná na libovolnou d.s., na víc args.  Procedurální parametry: už jsme použili: foreach  DC: akumuluj/3, prvky seznamu jsou data, ale i „příkazy“

(Částečná spec. argumentů)  predikát má několik prvních arg. daných, zbylé jsou parametry map_matice(P,I,O):- map(map(P),I,O). % matice jako seznam seznamu map2_matice(P,I1,I2,O):-map2(map2(P),I1,I2,O). plus_matice(M1,M2,M):-map2_matice(plus,M1,M2,M). plus(X1,X2,X3):- X3 is X1 + X2. map2(_P,[],[],[]). map2( P,[I|Is],[J|Js],[O|Os]):- mycall2(P,[I,J,O]),map2(P,Is,Js,Os). % nebo: call(P,I,.J,O) nasobmat(C,M1,M0):-map(map(mult( C)),M1,M0). %násobení matice konstantou mult(C,X1,X0):- X0 is C * X1.  musíme změnit/zobecnit mycall mycall2(P,Args):- % P je jméno jednoho již definovaného predikátu, srv. FP: anonymní fce P=.. [Pred|Args0], % args bez volných proměnných append(Args0,Args,Args1), C=..[Pred|Args1], call(C).  předávané predikátové argumenty by měli být bez volných proměnných  volné proměnné jsou sdílené mezi všemi voláními, neproběhne přejmenování proměnných => často nežádoucí chování, náchylné k chybám

(Parametrické zpracování seznamu)  funkční symbol je relace mezi složkami a celou strukturou  f.s. nahradíme jinou relací - předanou parametrem zpracuj(Snil,_Scons,[],Snil). zpracuj(Snil, Scons,[I|Is],O):- zpracuj(Snil,Scons,Is,O1), mycall(Scons,[I,O1,O]). suma(I,O):-zpracuj(0,plus,I,O). length(I,O):-zpracuj(0,plus1,I,O). mappend(I,O):-zpracuj([],append,I,O). plus(X,Y,Z):-Z is X+Y. plus1(_X,Y,Z):-Z is Y+1.

(Parametrické zpracování seznamu II)  idea zpracuj: (anglicky fold)  zpracuj(E, , [X1,.., Xn], Out)  Out := X1  (X2  (...  (Xn  E)..))  relace:  (Xn,E,A1),  (Xn-1,A1,A2),..  (X1,An- 1,An),An=Out  jiná relace: R(X1,E,A1), R(X2,A1,A2),.. R(Xn,An-1,An),An=Out  další varianty filter(_P,[],[]). filter( P,[I|Is],O):- (mycall(P,[I]) -> O=[I|O1] ; O=O1), filter(P,Is,O1).