1 / 28

Osnovni pojmovi PROLOG jezika

Osnovni pojmovi PROLOG jezika. Sintaksno ispravni niz znakova naziva se term . term. prosti term. strukture. konstante. promenljive. atomi. brojevi. Atom maksimalne dužine 255 znakova. Može se konstrisati na sledeće načine: Niz slova, cifra i znaka _ koji počinje malim slovom

barnabas
Download Presentation

Osnovni pojmovi PROLOG jezika

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. Osnovni pojmovi PROLOG jezika Sintaksno ispravni niz znakova naziva se term. term prosti term strukture konstante promenljive atomi brojevi

  2. Atom maksimalne dužine 255 znakova. Može se konstrisati na sledeće načine: • Niz slova, cifra i znaka _ koji počinje malim slovom predak ana marko roditelj x p1 • Niz specijalnih znakova :- =< • Proizvoljan niz kaaraktera između apostrofa ‘Marko’ ‘Beograd’ ‘123 dan’ • Brojevi u Prologu mogu biti celi i realni

  3. Promenljive • niz slova, cifara i znaka _ koji počinje velikim slovom ili znakom _ X X1 _d • doseg promenljive je rečenica (klauzula) u kojoj se koristi, sintaksno iste promenljive u različitim klauzulama tumačimo kao različite promenljive • sva javljanja iste promenljive u jednoj klauzuli dobijaju iste vrednosti • anonimana promenljiva _ (korisstimo je kada nam vrednsot proemnljive nije važna) bitiRoditelj(X):-roditelj(X,_).

  4. Strukture imeStrukture(argument1, argument2, ..., argument3) Ime strukture je atom, a argumenti su termi datum(10, 03,2010) datum(maj, 2010) ucenik(ana, matic, datum(10,12,1991)) funktor - ime strukture glavni funktor- funktor (ime strukture) i arnost strukture (broj argumenata) datum/2 datum/3 Izraz b*(a-c) +d je struktura +(*(b,-(a,c)),d) Pravilo je struktura sa funktorom :- p(X,Y):-q(X, Y), r(X) + * d - b a c :- , p(X,Y) q(X,Y) r(X)

  5. Unifikacija • Unifikacija je proces menjanja tva terma s ciljem da se ti termi učine identičnim. • Supstitucijom nazivamo konačan skup parova oblika X / t gde je X promenljiva, a t term, takvih da promenljiva X nastupa samo u jednom paru iz skupa. • Neka je A term a supstitucija.Kažemo da je A rezultat primene supstitucije  na term A. • Za term A kažemo da je instanca terma B ako postoji supstitucija  takva da važi A=B . • Najopštiji unifikator dva terma je supstitucija koja unifikuje ta dva terma tako da njihova instanca sadrži najveći mogući broj promenljivih.

  6. Algoritam unifikacije Neka su S i T termi. Unifikacija termova S i T vrši se na sledeći način: • Ako su S i T konstante one se unifikuju ako su identične • Ako je S promenljiva a term T bilo šta, onda se S i T unifikuju ako se promenljiva S ne javlja u termu T i instanca S je T. • Ako su S i T strukture tada se one unifikuju ako • S i T imaju isti glavni funktor • Ako se svi argumenti strukture S mogu unifikovati s odgovarajućim argumentima strukture T.

  7. Unifikacija se u Prologu se zadaje operatorom =. ?-datum(D,M,2010)=datum(10, mart,G). D=10 M=mart G=2010 yes ?-datum(D,M,2010)=datum(mart,G). No ?-X=Y, X=1. X=1 Y=1 yes ?-X=3, X=1. no

  8. Izračunavanje odgovora u Prolog-u p(X1,Y1):--q(X1),r(X1,Y1) 1 = { X1/X,Y1/Y} ?-p(X,Y) p(X,Y):--q(X),r(X,Y). p(d,4). q(a). q(b). q(c). r(a,1). r(a,2). r(c,3). ?-q(X),r(X,Y) q(a) 2 = { X/a} r(a,1) 3= { Y/1} ?-r(a,Y) [ ] X=a Y=1

  9. Primer : Izračunavanje odgovora u Prolog-u ?-taman(X),veliko(X) ?-braon(X),veliko(X) ?-crn(X),veliko(X) veliko(medved). veliko(slon). malo(macka). braon(medved). crn(macka). siv(slon). taman(Z):-crn(Z). taman(Z):-braon(Z). ?-veliko(macka) ?-veliko(medved). [ ] X=medved

  10. Procedura izvrši program uspeh / neuspeh indikator izvrši lista ciljeva vrednosti promenljivih • Indikator uspeha je yes ako se cilj može zadovoljiti, a inače je no. • Vrednost promenljivih se dobijaju samo u slučaju uspešnog zadovoljenja cilja koji sadrži promenljive.

  11. Opis procedure izvrši Procedura izvrši: Ako ne postoji cilj koji treba zadovoljiti procedura se završava uspehom, vrednosti promenljivih su određene kompozicijom korišćenih supstitucija. U suprotnom prelazi se na proceduru pretraži. Neka je zadat niz ciljeva G1,G2,...,Gm. Procedura pretraži: Traži klauzulu u programu odozgo na dole dok ne nađe prvu klauzulu C takvu da se glava te klauzule može unifikovati sa prvim podciljem G1. Ako nema takve klauzule, procedura izvrši se prekida sa neuspehom. Ako postoji takva klauzula C oblika: H:-B1,B2,....,Bn preimenuju se promenljive u C i dobija se varijanta C' od C, ali takva da C' i niz G1,G2,...,Gm nemaju zajedničke promenljive. Neka je C' oblika H':-B1',B2', ... Bn‘ Neka je  unifikator za G1 i H. U ciljni niz ?- G1,G2,...,Gm zamenjuje se G1 nizom B1',B2', ... Bn' i novi ciljni niz je ?-(B1',B2', ... Bn',G2,...,Gm) . Sada procedura Pretraži poziva proceduru Izvrši za novi ciljni niz. Ako se procedura Izvrši za novi ciljni niz završi uspehom, tada se i polazni ciljni niz završava uspehom. Ako se izvrašavanje novog ciljnog niza završava neuspehom, onda se prelazi na proceduru Pretraži sa prethodnim ciljnim nizom. Pretraživanje se nastavlja traženjem klauzule koja neposredno sledi iza C.

  12. Ako sistem uspešno završi zadatak, korisnik može zahtevati od sistema da backtracking-om nađe drugo rešenje. U ovom slučaju se sistem vraća na proceduru Pretraži kao da zadatak nije uspešno završen sa poslednjom klauzulom C.

  13. Stablo pretraživanja Neka je P programa i neka je G polazni cilj. Stablo pretraživanja se definiše koracima 1-3: (1) Koren stabla je polazni cilj G. (2) Neka je cilj ?- Gi,Gi+1,...,Gm čvor stabla pretraživanja. Tada čvor ima po jednog potomka za svaku klauzulu H:-B1,B2,....,Bn (*) iz programa P za koju se struktura Gi i H mogu unifikovati. Neka je H':-B'1,B'2,....,B'n varijanta (*) i neka je  najopštitji unifikator za Gi i H'. Tada je potomak čvora ?-(B'1,B'2,....,B'n, Gi+1i,...,Gm) . Klauzule, čije glave se unifikuju sa ciljem Gi traže se u programu odozgo na dole, a generisani potomci čvora postavljaju se s leva nadesno. (3) Potomak koji nema podcilj u telu naziva se praznim ciljem i označava [ ]

  14. Neki važni pojmovi Čvorom uspeha nazivamo čvor koji sadrži prazan cilj. Granu stabla koja zavrašava čvorom uspeha nazivamo grana uspeha. Čvorom neuspeha nazivamo čvor koji sadrži neprazan cilj, a nema potomaka. Grana neuspeha je grana koja se se zavrašava čvorom neuspeha. Konačne grane su grane uspeha i grane neuspeha. Beskonačne grane su grane koje nisu konačne. Stablo pretraživanja nazivamo konačnim ako su sve grane stabla konačne. Konačno stablo koje nema nijednu granu uspeha nazivamo konačno stablo neuspeha.

  15. Stablo pretraživanja (k1) p(X,Y):--q(X), r(X,Y). (k2) p(d,4). (k3) q(a). (k4) q(b). (k5) q(c). (k6) r(a,1). (k7) r(a,2). (k8) r(c,3). (1) ?-p(X,Y) (2) ?-q(X),r(X,Y). (9) [ ] X=d Y=4 (6) ?-r(b,Y) čvor neuspeha (3) ?-r(a,Y) (7) ?-r(c,Y) (4) [ ] X=a Y=1 (5) [ ] X=a Y=2 (8) [ ] X=c Y=3

  16. SIMULACIJA PROCEDURE IZVRŠI ?-p(pero,X) k3 k4 ?-r(pero,X) ?-r(pero,Z2),p(Z2,X) k1 k1 [ ] X=ana ?-p(ana,X) k3 k4 ?-r(ana,Z4),p(Z4,X) ?-r(ana,X) k2 (k1) r(pero,ana). (k2) r(ana,marko). (k3) p(X,Y):-r(X,Y). (k4) p(X,Y):-r(X,Z),p(Z,Y). k2 [ ] X=marko ?-p(marko,X) k3 k4 ?-r(marko,Z6),p(Z6,X) čvor neuspeha ?-r(marko,X) čvor neuspeha

  17. STABLO PRETRAŽIVANJA ?-p(pero,X) ?-r(pero,X) ?-r(pero,Z2),p(Z2,X) [ ] X=ana ?-p(ana,X) ?-r(ana,Z4),p(Z4,X) ?-r(ana,X) (k1) r(pero,ana). (k2) r(ana,marko). (k3) p(X,Y):-r(X,Y). (k4) p(X,Y):-r(X,Z),p(Z,Y). [ ] X=marko ?-p(marko,X) ?-r(marko,Z6),p(Z6,X) čvor neuspeha ?-r(marko,X) čvor neuspeha

  18. Promena redosleda terma u telu pravila ?-p(pero,X) ?-r(pero,X) ?- p(Z2,X),r(pero,Z2) ?- r(Z2,X),r(pero,Z2) [ ] X=ana ?- p(Z3,X),r(Z2,Z3),r(pero,Z2) beskonačna grana ?-r(pero,pero) čvor neuspeha ?-r(pero,ana) (k1) r(pero,ana). (k2) r(ana,marko). (k3) p(X,Y):-r(X,Y). (k4) p(X,Y):-p(Z,Y),r(X,Z). [ ] X=marko

  19. Promena redosleda klauzula u programu ?-p(pero,X) ?-r(pero,X) ?- p(Z1,X),r(pero,Z1) ?- p(Z2,X),r(Z1,Z2),r(pero,Z1) beskonačna grana [ ] X=ana ?- r(Z3,X),r(pero,Z3) ?-r(pero,ana) ?-r(pero,pero) čvor neuspeha (k1) r(pero,ana). (k2) r(ana,marko). (k3) p(X,Y):-p(Z,Y),r(X,Z). (k4) p(X,Y):-r(X,Y). [ ] X=marko

  20. Negacija u Prolog-u Kada PROLOG sistem naiđe na cilj oblika not (C’), on pokušava da zadovolji cilj C’ . Ako uspe da zadovolji cilj C’onda cilj not(C’) pada. Ako u pokušaju da zadovolji cilj C’ imamo konačno stablo neuspeha, onda cilj not (C’) uspeva.

  21. DOPUNA STABLA PRETRAŽIVANJA TAČKOM 2’ (2’) Neka je cilj ?-not (Gi), Gi+1, …,Gn čvor stabla pretraživanja. Ako cilj Giima konačno stablo pretraživanja sa granom uspeha onda posmatrani čvor nema potomka. ako cilj Gi ima konačno stablo neuspeha onda je potomak datog čvora ?- Gi+1, …,Gn

  22. Primer za negaciju ?-p(X,Y) ?-not (X=Y),a(X),a(Y) čvor neuspeha ?-X=Y ?-p(X, Y). no ?-p1(X, Y). X=1 Y=2; X=2 Y=1; no [ ] čvor uspeha a(1). a(2). p(X,Y):-not (X=Y),a(X),a(Y). p1(X,Y):-a(X),a(Y), not (X=Y).

  23. nastavak primera a(1). a(2). p(X,Y):-not (X=Y),a(X),a(Y). p1(X,Y):-a(X),a(Y), not (X=Y). ?-p1(X,Y) ?-a(X),a(Y), not (X=Y). ?- a(Y), not (1=Y). ?- a(Y), not (2=Y). ?-not(1=1) ?-not(1=2) čvor neuspeha Slicnim postupkom dobijamo X=2 Y=1 ?-1=1 ?-1=2 čvor neuspeha [ ] [ ] X=1 Y=2

  24. ARITMETIKA Operator = i njegova negacija \=: cilj Term1=Term2 uspeva ukoliko se Term1 i Term2 mogu unifikovati. Cilj Term1 \= Term2 uspeva ako cilj Term1=Term2 pada i obrnuto. Dejstvo Term1\=Term2 je isto kao not (Term1=Term2) ?-X=1+2. ?- X is 3+2 X=5 yes ?- 3 is 1+1 no ?- X=1+2, X=3. no ?- 3 is 1+2 yes • Ukoliko želimo da PROLOG interpreter izračuna izraz onda koristimo Predikat ‘is’. Cilj Vrednost is Aritmetički_izraz izvodi se u dve etape: • izračuvna se vrednost aritmetičkog izraza navedenog na desnoj strani • 2. pokušava se izvršiti unifikacija izračunate vrednosti sa termom Vrednost. Cilj uspeva ako obe etape uspeju.

  25. ?- X is Y+1 ! Error ?- Y is 1+2, X is 2+Y. Y=3 X=5 yes ?- 3+4 is 3+4. no ?- N=1, N1 is N+1. N=1 N1=2 ?- N=1, N is N+1. no

  26. U PROLOG-u postoje operatori poređenja: =:= negacija je =\= > >= < =< Opšti oblik korišćenja operatora poređenja je: Aritmetićki_izraz1 operator Aritmetićki_izraz2. Za poređenje termova u PROLOG-u se koristi operator == , njegova negacija je \==.

  27. ?-suma (2,Y). (k2) 1={N’/2,S’/Y} (k1) suma(0,0). (k2) suma(N,S):-N>0, N1 is N-1, suma(N1,S1), S is S1+N. ?-2>0,N1’ is 2-1, suma(N1’.,S1’), Y is S1’+2 ?-N1’ is 2-1, suma(N1’,S1’), Y is S1’+2 ?-suma(1,S1’), Y is S1’+2 (k2) 2={N’’/1,S’’/S1’} ?-1>0,N1’’ is 1-1, suma(N1’’.,S1’’),S1’ is S1’’+1, Y is S1’+2. ?-N1’’ is 1-1, suma(N1’’.,S1’’),S1’ is S1’’+1, Y is S1’+2. ?- suma(0,S1’’),S1’ is S1’’+1, Y is S1’+2. (k1) (k2) ?- S1’ is 0+1, Y is S1’+2. ?-0>0,N1’’’ is 0-1,….. čvor neuspeha ?- Y is 1+2. [ ]

  28. (k1) suma(N,S):-suma(N,S,0). (k2) suma(0,S,S). (k3) suma(N,S,T):-N>0, T1 is T+N, N1 is N-1, sum(N1,S,T1). suma(0,S,T):-S is T ?-suma(2,S) (k1) ?-suma(2,S,0) (k3) ?-2>0,T1’ is 0 +2, N1’ is 2-1, suma(N1’,S, T1 ’) ?-T1’ is 0 +2, N1’ is 2-1, suma(N1’,S, T1’) ?-N1’ is 2-1, suma(N1’,S, 2) ?-suma(1,S, 2) (k3) ?-1>0,T1’’ is 2 +1, N1’’ is 1-1, suma(N1’’,S, T1’’) ?- N1’’ is 1-1, suma(N1’’,S, 3) ?- suma(0,S, 3) (k3) (k2) ?-0>0,T1’’’ is 3 +0, N1’’’ is 0-1, suma(N1’’’,S, T1’’’) [ ] Čvor neuspeha S=3

More Related