1 / 26

Logické programování

Logické programování. Přednáška číslo 2. Programování v Prolog u. Programování v PROLOGu spočívá v deklarování určitých faktů o objektech a relacích premier ( uk,cameron ). definování pravidel vztahujících se k objektům a relacím likes ( alena,X ):-male(X), handsome (X), rich (X),

keena
Download Presentation

Logické programování

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Logické programování Přednáška číslo 2

  2. Programování v Prologu • Programování v PROLOGu spočívá v • deklarování určitých faktů o objektech a relacích premier(uk,cameron). • definování pravidel vztahujících se k objektům a relacím likes(alena,X):-male(X), handsome(X), rich(X), young(X), not(smoke(X)). • kladení otázek na objekty a relace ?-wrote(tolkien,Book).

  3. První program • Rodinné vztahy Petr Ivana Pepík Iva

  4. Zápis v Prologu % deklarovani faktu % pohlavi osob muz(petr). muz(pepik). zena(ivana). zena(iva). % vztah mezi osobami % rodice(Otec,Matka,Dite). rodice(petr,ivana,pepik). rodice(petr,ivana,iva).

  5. Pravidla % otec(Kdo,Komu) otec(O,D) :- rodice(O,_,D). % otec(Kdo) otec(O) :- rodice(O,_,_). % sestra(Kdo,Komu) sestra(S,X) :- zena(S), rodice(O,M,S), rodice(O,M,X), S\=X.

  6. První program • Rozšíření databáze faktů Karel Anna Josef Věra Petr Ivana Pepík Iva

  7. Pravidla % dedecek(Deda,Vnouce) dedecek(D,V) :- rodice(D,_,X), rodice(X,_,V). dedecek(D,V) :- rodice(D,_,X), rodice(_,X,V). % lze zapsat i s použitím středníku dedecek(D,V) :- rodice(D,_,X), (rodice(X,_,V) ;rodice(_,X,V)).

  8. Další rozšiřování • Napište predikáty pro relace: matka, dcera, syn, bratr, babicka, … • Rozšíření databáze faktů - k zadávání dat využijte pouze predikáty zena/1, muz/1, rodice/3 • Napište predikáty pro další relace: - stryc, teta, snacha, svagr, svagrova, tchyne, tchan, sestrenice, bratranec, synovec, neter,... - predek(Osoba,Predek) % -k zadané osobě postupně vypíše všechny předky - potomek(Osoba, Potomek) %- postupně najde všechny potomky

  9. Prolog – znovu a lépe • Syntaxe Prologu - program se skládá z termů - term je zapsán jako sekvence znaků dané abecedy • malá a velká písmena • číslice • speciální znaky

  10. Prolog – znovu a lépe • Syntaxe Prologu term konstanta proměnná struktura integer atom

  11. Prolog – znovu a lépe • Konstanty - určují jména objektů a relací - rozlišujeme – atomy a integery • Integer • celá čísla ( -5, 0, 1, 4073) • rozsah záleží na implementaci • většina moderních implementací umí pracovat i s reálnými čísly • přesto ani dnes Prolog není jazykem pro složité matematické výpočty

  12. Prolog – znovu a lépe • Atomy • sekvence znaků začínající malým písmenem likes, tom, president, paris, my_book, x5 • řetězec znaků uzavřený v apostrofech ‘Tom’, ‘Clinton’, ‘Paris’, ‘Karel_IV’, ‘100’ • speciální atomy ?-, :-, !, tečka

  13. Prolog – znovu a lépe • Proměnné • sekvence znaků začínající velkým písmenem nebo podtržítkem X, Who, Vstup, Dedova_vnucka, _3_prani • samotné podtržítko je anonymní proměnná, jejíž hodnota mne nezajímá a nebude dále využívána ?- dedecek(D,_). % je D dědečkem? • anonymní proměnná je v každém výskytu jedinečná dedecek(D,V) :- rodice(D,_,X), rodice(X,_,V).

  14. Prolog – znovu a lépe • Struktury • objekty skládající se z jiných objektů (komponent) kniha(rur, karel, capek). kontakt(tom,novak, horni, 32, kladno, 6, 3, 1986). • komponenty mohou být spojeny pomocí funktoru • sdružování souvisejících informací napomáhá lepší organizaci dat kniha(rur, autor(karel, capek)). kontakt(osoba(tom,novak), adresa(horni,32,kladno), nar(6,3,1986)). • struktury se mohou účastnit dotazování ?- kniha(rur,Kdo). % Kdo napsal rur? Kdo = autor(karel, capek)

  15. Prolog – znovu a lépe • Aritmetické operátory • +, - sčítání, odečítání • *, / násobení, dělení • // celočíselné dělení („div“) • mod zbytek po dělení • operátory mají obvyklou prioritu, ale je snadné ji předefinovat • standardní je levá asociativita, ale i tu lze snadno předefinovat 4 /2/2 levá asoc.: (4/2)/2 = 1 pravá asoc.: 4/(2/2) = 4 • zápis 3+5je chápán jako struktura +(3,5)a neplatí tedy automaticky ani 3+5 = 8 • struktura vytvořená pomocí aritmetických operátorů je struktura jako každá jiná a vyhodnotí se až použitím operátoru is

  16. Prolog – znovu a lépe • Operátor rovnosti ‘=‘ • atomy se rovnají pouze samy sobě ?- jirka=jirka. ?- jirka=tom. yes no ?- tom=‘Tom’. no • integery se rovnají pouze samy sobě ?- 23=23. ?- 25=23. yes no

  17. Prolog – znovu a lépe • Operátor rovnosti ‘=‘ • je-li jedna strana rovnosti specifikovaná a druhá nespecifikovaná, příslušná proměnná nabude konkrétní hodnotu ?- X=jirka. ?- tom=T. X=jirka. T=tom yes yes ?- K = likes(adam, eva). ?- A=3, B = 5, A=B. K = likes(adam, eva). no yes % 5 \= 3

  18. Prolog – znovu a lépe • Operátor rovnosti ‘=‘ • dvě struktury se rovnají, jestliže mají stejný funktor, aritu a odpovídající si komponenty jsou si rovny ?- osoba(X,Y,kladno,nar(5,6,85))=osoba(jan,toman,M,nar(5,6,85)). X = jan Y = toman M = kladno yes

  19. Prolog – znovu a lépe • Operátor rovnosti ‘=‘ • při porovnání dvou nespecifikovaných proměnných se tyto proměnné stanou sdílenými a pokud později některá z nich bude specifikována, tutéž hodnotu převezme i proměnná druhá ?- X =Y, Y = 5. ?- X =Y, Y = 5, X = 3. X = 5 no Y = 5 % 5\=3 yes

  20. Prolog – znovu a lépe • Operátor rovnosti ‘=‘ - shrnutí: • snaží udělat obě strany shodnými a uspěje vždy, když je alespoň jedna strana nespecifikovaná • Opačný predikát ‘\=‘ • uspěje vždy, když není splněn predikát ‘=’ sestra(S,X) :- zena(S), rodice(O,M,S), rodice(O,M,X), S\=X.

  21. Prolog – znovu a lépe • Další porovnávací operátory • == čisté porovnání (porovná, ale nepřiřadí) • \==nerovnost, opak k == ?- X == 2. ?- X = 3, X == 3. no X = 3 yes ?- 6 == 5+1. ?- 1+5 == 5+1. no no

  22. Prolog – znovu a lépe • Další porovnávací operátory • =:= porovnání s vyhodnocením (pracovně vyhodnotí výrazy) • =\=nerovnost, opak k =:= ?- 1+5 =:= 5+1. yes ?- X = 4+5, Y = 3+6, X =:= Y.?- X = 4+5, Y = 3+6, X == Y. X = 4+5 no Y = 3+6 % +(4,5) není totéž jako +(3,6) yes

  23. Prolog – znovu a lépe • Operátor vyčíslení ‘is‘: • vyčíslí pravou stranu výrazu a pokusí se přiřadit výslednou hodnotu levé straně ?- X is 6*(4+2)/2. ?- 9 is 5+4. ?- X =1, X is X+1. X = 18 yes no yes • Další porovnávací operátory • >, < větší, menší • >=, =< větší rovno, menšírovno (POZOR - nesmí vypadat jako šipka!!!)

  24. Použití středníku % absolutní hodnota(Cislo,Vysledek) abs_h(C,V) :- C>=0, V is C ; V is –C. % korektní provedení abs_h(C,V) :- C>=0, V is C. abs_h(C,V) :- C < 0, V is -C.

  25. Příklad – skripta str. 78 kral(premysl_otakar_I,1197,1230). kral(vaclav_I,1230,1253). kral(premysl_otakar_II,1253,1278). predchudce(Prvni, Druhy):-kral(Prvni,_,Do),kral(Druhy,Do,_). naslednik(A,B):-predchudce(B,A). ?- kral(vaclav_I,1230,1253). yes ?- kral(X, 1253,Rok). X = premysl_otakar_II, Rok = 1278 Skutečnosti (fakta) Obecné vztahy (pravidla) Konverzace s Prologem

  26. Příklad – skripta str. 78 panoval(Rok, Kral) :- kral(Kral, R1, R2), R >= R1, R =< R2. ?-panoval(1273, X). X = premysl_otakar_II yes doba_vlady(Kral, Kolik):- kral(Kral,R1,R2), Kolik=R2-R1. ?- doba_vlady(premysl_otakar_II,X). X = 25 % tentýž program funguje i opačně – od výstupu ke vstupu % tzv. reverzibilita logických programů ?- doba_vlady(X,25). X = premysl_otakar_II yes

More Related