logick programov n n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Logické programování PowerPoint Presentation
Download Presentation
Logické programování

Loading in 2 Seconds...

play fullscreen
1 / 26

Logické programování - PowerPoint PPT Presentation


  • 114 Views
  • Uploaded on

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),

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Logické programování' - keena


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
logick programov n

Logické programování

Přednáška číslo 2

programov n v prolog u
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).

prvn program
První program
  • Rodinné vztahy

Petr

Ivana

Pepík

Iva

z pis v prolog u
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).

pravidla
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.

prvn program1
První program
  • Rozšíření databáze faktů

Karel

Anna

Josef

Věra

Petr

Ivana

Pepík

Iva

pravidla1
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)).

dal roz i ov n
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

prolog znovu a l pe
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
prolog znovu a l pe1
Prolog – znovu a lépe
  • Syntaxe Prologu

term

konstanta

proměnná

struktura

integer

atom

prolog znovu a l pe2
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
prolog znovu a l pe3
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

prolog znovu a l pe4
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).

prolog znovu a l pe5
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)

prolog znovu a l pe6
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
prolog znovu a l pe7
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

prolog znovu a l pe8
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

prolog znovu a l pe9
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

prolog znovu a l pe10
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

prolog znovu a l pe11
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.

prolog znovu a l pe12
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

prolog znovu a l pe13
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

prolog znovu a l pe14
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!!!)

pou it st edn ku
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.

p klad skripta str 78
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

p klad skripta str 781
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