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.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Programování funkcí v Excelu
HYPERTEXT PREPROCESSOR. JAZYK PHP. Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk určený pro web. Je celkem jednoduchý, snadno přenositelný.
RODINA Maminka a tatínek jsou mí rodiče.
Programování v Pascalu
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Programovací jazyk Prolog
Programování v Pascalu Přednáška 3
Ing. Jan Popelka, Ph.D. odborný asistent katedra informatiky a geoinformatiky Univerzita Jana Evangelisty Purkyně v Ústí nad Labem
JUI - 1. přednáška Funkcionální programování Úvod do jazyka Lisp RNDr. Jiří Dvořák, CSc.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
If-else, do-while, switch, operátory
Skriptový jazyk, který se používá při tvorbě stránek.
NÁZEV ŠKOLY: SPECIÁLNÍ ZÁKLADNÍ ŠKOLA A MATEŘSKÁ ŠKOLA VARNSDORF AUTOR: Marcela Kanisová, NÁZEV: VY_32_INOVACE_17_Rodina TÉMA: Příbuzenské.
Logické programování Úvodní přednáška.
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
EU Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Irena Nemetová. Materiál vznikl v rámci projektu EU peníze školám.
VY_42_INOVACE_377_CELÁ ČÍSLA – POČETNÍ OPERACE
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
PŘÍBUZENSKÉ VZTAHY Vypracovala: Mgr. Miloslava Tremlová.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
C – strukturované příkazy
Jemný úvod do MATLABu © Leonard Walletzký, ESF MU, 2000.
RODINA Mgr. Michal Oblouk.
Predikátová logika.
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
Cvičení.
JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc.
Programovací jazyk PASCAL
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Výroková logika.
Informatika I 1. přednáška
DS_Unc1 Relace, ohodnocená relace, fuzzy odvozování Relace a ohodnocené relace jako nástroj pro popis závislostí Max-min princip Princip rozšíření Odvozování.
Název Vztahy v rodině   Šablona CZ.1.07/1.4.00/    Poř.číslo
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
Ekvivalentní úpravy rovnic
Marie Duží vyučující: Marek Menšík Logika: systémový rámec rozvoje oboru v ČR a koncepce logických propedeutik pro mezioborová studia.
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Pascal – strukturované příkazy
Mezilidské vztahy 3. ročník
Základní škola T. G. Masaryka, Český Krumlov, T. G. Masaryka 213
Rodokmen Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Zuzana Švihlová.
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ě.
Základní škola Velké Karlovice, okres Vsetín ŠKOLA: Základní škola Velké Karlovice, okres Vsetín Mgr. Eva Cigániková AUTOR: Mgr. Eva Cigániková VY_32_INOVACE_OV,6_02_RODINA.
Název školy: ZŠ Klášterec nad Ohří, Krátká 676 Autor: Mgr. Veronika Kubincová Název materiálu: VY_32_INOVACE_10_09_ PL Rodinné vztahy Číslo projektu: CZ.1.07/1.4.00/
RODINNÉ VZTAHY Název školy: Základní škola Karla Klíče Hostinné Autor: Mgr. Helena Baculáková Název: VY_32_INOVACE_01_B_01_RODINNÉ VZTAHY Téma: OBČANSKÁ.
Algoritmizace a programování Aritmetické, Relační a Logické operátory, Knihovny.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Miroslava Wrubelová. Dostupné z Metodického portálu ISSN: Provozuje.
Název školy: ZŠ Klášterec nad Ohří, Krátká 676
Rodina, náhradní rodinná péče
Mgr. Romana Vítková ZŠ a MŠ Nedašov
Rodina, příbuzenství.
Výukový materiál zpracován v rámci projektu
RODINA Mgr. Michal Oblouk.
Základní škola Ústí nad Labem, Anežky České 702/17, příspěvková organizace   Číslo projektu: CZ.1.07/1.4.00/ Název projektu: „Učíme lépe a moderněji“
Kurz algoritmizace a programování v jazyce C
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Výukový materiál zpracován v rámci projektu
Autor Mgr. Hana Drchotová Škola ZŠ Bor, Školní 440, Bor, Téma
PROLOG PROgramování v LOGice
Rovnost versus rovnice
PŘÍBUZENSKÉ VZTAHY Vypracovala: Mgr. Miloslava Tremlová.
Logické programování Úvodní přednáška.
Transkript prezentace:

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)). young(X), not(smoke(X)). – kladení otázek na objekty a relace ?-wrote(tolkien,Book).

3 První program Rodinné vztahy PepíkIva PetrIvana

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,S), rodice(O,M,X), rodice(O,M,X), S\=X. S\=X.

6 První program Rozšíření databáze faktů PepíkIva PetrIvana KarelAnnaJosefVěra

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)). (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 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 malá a velká písmena číslice číslice speciální znaky speciální znaky

10 Prolog – znovu a lépe Syntaxe Prologu proměnnákonstanta atominteger term struktura

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) celá čísla ( -5, 0, 1, 4073) rozsah záleží na implementaci rozsah záleží na implementaci většina moderních implementací umí pracovat i s reálnými čísly 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 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 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 ?-, :-, !, tečka

13 Prolog – znovu a lépe Proměnné sekvence znaků začínající velkým písmenem nebo podtržítkem sekvence znaků začínající velkým písmenem nebo podtržítkem X, Who, Vstup, Dedova_vnucka, _3_prani 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 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? ?- dedecek(D,_). % je D dědečkem? anonymní proměnná je v každém výskytu jedinečná anonymní proměnná je v každém výskytu jedinečná dedecek(D,V) :- rodice(D,_,X), rodice(X,_,V). 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) objekty skládající se z jiných objektů (komponent) kniha(rur, karel, capek). kontakt(tom,novak, horni, 32, kladno, 6, 3, 1986). kontakt(tom,novak, horni, 32, kladno, 6, 3, 1986). komponenty mohou být spojeny pomocí funktoru komponenty mohou být spojeny pomocí funktoru sdružování souvisejících informací napomáhá lepší organizaci dat 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í 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í +, -sčítání, odečítání *, /násobení, dělení //celočíselné dělení („div“) //celočíselné dělení („div“) mod zbytek po dělení operátory mají obvyklou prioritu, ale je snadné ji předefinovat operátory mají obvyklou prioritu, ale je snadné ji předefinovat standardní je levá asociativita, ale i tu lze snadno 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+5 je chápán jako struktura +(3,5) a neplatí tedy automaticky ani 3+5 = 8 zápis 3+5 je 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 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ě atomy se rovnají pouze samy sobě ?- jirka=jirka. ?- jirka=tom. yesno ?- tom=‘Tom’. no integery se rovnají pouze samy sobě integery se rovnají pouze samy sobě ?- 23=23. ?- 25=23. yesno

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 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 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á 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 Y = 5 % 5\=3yes

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á 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 ‘=’ uspěje vždy, když není splněn predikát ‘=’ sestra(S,X) :- zena(S), rodice(O,M,S), rodice(O,M,X), rodice(O,M,S), rodice(O,M,X), S\=X. S\=X.

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

22 Prolog – znovu a lépe Další porovnávací operátory =:= porovnání s vyhodnocením =:= porovnání s vyhodnocením (pracovně vyhodnotí výrazy) =\= nerovnost, opak k =:= =\= 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 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ě 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 = 18yesno yes Další porovnávací operátory 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), Rok >= R1, Rok = = R1, Rok =< R2. ?-panoval(1273, X). X = premysl_otakar_II yes doba_vlady(Kral, Kolik):- kral(Kral,R1,R2), Kolik is 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