You are on page 1of 35

PROLOG

UVOD, ČINJENICE, UPITI

Uvod u formalne metode


Sadržaj

• Uvod
• Struktura Prolog programa
• Činjenice
• Upiti
• Zadatci (Escape Room, Geneološka baza podataka)
Literatura

• Bratko, I.: PROLOG Programming for Artificial Intelligence, 4.


izdanje, Addison-Wesley, 2011.
(riješeni zadaci iz knjige – 3. izdanje:
http://www.pearsoned.co.uk/highereducation/resources/
bratkoprologprogrammingforartificialintelligence3e/)
• Wielemaker, J.: SWI-Prolog Reference Manual, (32 bit)
http://www.swi-prolog.org/pldoc/refman/
• Röhner, G.: SWI-Prolog-Editor,
http://arbeitsplattform.bildung.hessen.de/fach/informatik/swiprolog/indexe.html
• Adventure in Prolog,
http://www.amzi.com/AdventureInProlog/advtop.php
Uvod

PROLOG = PROgramming in LOGic

• Primjena:
- Ekspertni sustavi
- Procesiranje prirodnog jezika
- Inteligentne baze podataka
Struktura Prolog programa
BAZA PODATAKA

PREDIKAT PREDIKAT ... PREDIKAT

KLAUZULA

KLAUZULA

...
KLAUZULA
Prolog baza podataka

BAZA PODATAKA

STATIČKA DINAMIČKA
Predikat

predikat(x1, x2, ..., xn)


arnost (kratnost)
predikata
ime argumenti
predikata

U Prologu mogu postojati dva različita predikata s


istim imenom, ali različitom kratnošću.
Klauzula

KLAUZULA

ČINJENICA PRAVILO
Pravilo

predikat(x1, ..., xn) :- p1(x1, ..., xn), ..., pn(x1, ..., xm).

vrat
klauzule tijelo
(kopula) klauzule
glava (pretpostavke)
klauzule
(zaključak) Ovakva klauzula se
naziva Hornova klauzula
Činjenica

predikat(x1, ..., xn).

Činjenica je specijalna
vrsta pravila bez tijela
i vrata.
Upit

?- p1(x1, ..., xn), ..., pn(x1, ..., xm).

Upit je dio pravila bez glave i vrata,


koji se postavlja tijekom izvršavanja
Programa.
Abeceda

•Abecedu Prologa čine:


• velika slova: A, B, ..., Z
• mala slova: a, b, ..., z
• brojke: 0, 1, ..., 9
• posebni znakovi: *, +, -, /, (, ), ...
Tipovi podataka

objekti (termi)

jednostavni objekti strukture

konstante varijable

brojevi atomi (stringovi)


Brojevi

• Brojevi su nizovi znakova koji se Primjer:


sastoje od brojaka i najviše jednog 12345
nastupa specijalnog znaka “.” -12
(integer i realni brojevi)
4.231

• Ispred broja se može nalaziti


predznak, koji se predstavlja
specijalnim znakom “-”

• Realni brojevi se ne koriste često u


tipičnim Prolog programima
(simbolička računanja)
Atomi
Primjer:
Atomi su:
slovo
• nizovi slova, brojki i specijalnih a_b_c_
znakova “_”, a moraju započeti logika
malim slovom x25
Primjer:
• nizovi specijalnih znakova, kod <--->
kojih treba paziti, jer neki od njih ...
u Prologu imaju posebno .:.
značenje ::=
(; :- ** ==>)
Primjer:
• bilo koji niz znakova unutar 'A*Si'
jednostrukih navodnika '*+./f '
'Atom'
'Ivica i
Marica'
Varijable

Varijable su: Primjer:


• nizovi slova, brojki i specijalnih znakova “_”, A
koji započinju velikim slovom ili specijalnim Aa
znakom “_” AA_b
_A
_a
• Doseg varijable je samo jedna klauzula
• Pojava istog imena varijable više puta u jednoj
klauzuli označava istu varijablu, ali pojava istog
imena varijable u dvije ili više klauzula
označava dvije ili više različitih varijabli
• Naravno, atom (konstanta) u svakom dijelu
programa uvijek znači isto
Varijable

• Varijable koje se javljaju samo jednom u


klauzuli ne moraju se imenovati. Za taj
slučaj u Prologu postoje tzv. anonimne
varijable koje se označavaju samo
znakom “_”

Primjer:
pobjednik(X) :- pobijedio(X, _, _).

• Anonimne varijable ne ispisuju se u


rješenju
Strukture

• Strukturirani objekti su oni koji se sastoje od više


komponenti, koje mogu biti jednostavni objekti ili također
strukture.
• Grade se pomoću funktora, koji su određeni svojim imenom i
kratnošću, zbog čega mogu postojati dvije različite strukture
sa istim imenom i različitom kratnošću.
• Svi strukturirani objekti mogu se prikazati kao stablo kojem se
u korijenu nalazi funktor, a grane su argumenti (koji se mogu
dalje granati, ako su i sami strukture).
datum

Primjer:
datum(12, prosinac, 2017) 12 prosinac 2017
Tipovi podataka

• Sintaktički, svi tipovi podataka su termi.


• Pojedini tipovi podataka prepoznaju se isključivo prema
sintaktičkom obliku.
Činjenice

• Dakle, činjenice su specijalna pravila koja se


sastoje samo od glave (nemaju vrat i tijelo).

predikat(x1, ..., xn).

Primjer:
p(x,y).
q(1,2).
Avantura “Escape Room”
Megapopularna igra
Različite igre, jedinstveni scenariji

Timski rad
• Avanturist je čuo da u staroj
kamenoj kući u šumi u tajnoj sobi
postoji blago. Odlučio je pronaći
ga. Lutao je šumom i napokon
došao do kuće. Kad je ušao, vrata
su se zalupila za njim i zaključala.
Pretražio je sobe, ali ništa nije
našao. U podrum nije mogao ući,
jer je bilo premračno. U jednoj je
sobi vidio fenjer, ali nije ga imao
čime upaliti. U drugoj je sobi vidio
neke bočice i jabuku na stolu...

Pobjeći iz sobe unutar 60 min


Ovakva vrsta zabave krije paket prepun kreativnih izazova i logičkih problema

Odgonetnuti zagonetke, dešifrirati kodove, pronaći skrivene tragove,… https://www.youtube.com/watch?v=TjXAXnacKMc


Karta avanture “Escape Room”
Stara kamena kuća
Soba1
Šuma

Podrum
Hodnik1 Soba3

Šuma
Soba2

Hodnik2 Stepenice
Definiranje predikata
mjesto / 1
mjesto(šuma).
mjesto(soba1). Soba1
Podrum
mjesto(soba2).
Šuma
mjesto(soba3). Hodnik1

mjesto(podrum). Soba3
Soba2
mjesto(hodnik1).
mjesto(hodnik2).
mjesto(stepenice). Hodnik2 Stepenice
Definiranje predikata
lokacija / 2

• Nadalje želimo definirati stvari koje se nalaze u


prostorijama. Popis stvari je sljedeći:
• u sobi1 su komoda i krevet, a na komodi je fenjer
• u sobi2 je stol, a na stolu se nalaze jabuka, napitak1 i
napitak2
• u sobi3 je blago
• u hodniku 2 je vaza, a u vazi su šibice
• u podrumu je izbočina na zidu
Definiranje predikata
lokacija / 2
lokacija(komoda, soba1).
lokacija(krevet, soba1).
lokacija(fenjer, komoda).
lokacija(stol, soba2).
lokacija(jabuka, stol).
lokacija(napitak1, stol).
lokacija(napitak2, stol).
lokacija(blago, soba3).
lokacija(vaza, hodnik2).
lokacija(šibice, vaza).
lokacija(izbočina, podrum).
Definiranje predikata
vrata / 2
• Želimo definirati i vrata(šuma, hodnik1).
mogućnost prolaza iz
prostorije u prostoriju vrata(soba1, hodnik1).
prema karti avanture. vrata(soba2, hodnik1).
• Upozorenje: vrata(soba2, hodnik2).
p(x,y) p(y,x) vrata(hodnik2, stepenice).
• Mi ćemo za sada imati
samo jednosmjerna vrata(podrum, stepenice).
vrata, koja ćemo u
potpunosti definirati
kasnije kada objasnimo
pravila.
Definiranje predikata
neotrovno / 1 i otrovno / 1
• U igri postoje neke neotrovno(jabuka).
stvari koje igrač može neotrovno(napitak1).
pokušati pojesti ili
popiti.
• Stoga ćemo i njih otrovno(napitak2).
definirati tako da:
• neotrovni budu jabuka i
napitak1,
• dok će napitak2 biti
otrovan.
Definiranje predikata
polozaj / 1 i ugaseno / 1
• Na kraju još želimo definirati polozaj(šuma).
dva bitna elementa: ugaseno(fenjer).
• početni položaj igrača,
• stanje fenjera (upaljen/ugašen).
• Na početku igre igrač se nalazi
u šumi.
• Neka je fenjer ugašen.
Geneološka baza podataka

• Definirajte osobe iz svoje


obitelji:
• osobu definirajte predikatom
osoba(ime,spol)
• osobe povežite predikatom
roditelj(a,b) u značenju “a je
roditelj od b”
• U bazu podataka unesite sebe,
svoje djedove, bake, roditelje i
braću
• Unesite i braću i sestre vaših
roditelja, njihove supružnike i
njihovu djecu
Upiti
• Upiti u Prologu rade na
principu ispunjavanja uzoraka.
• Uzorak u upitu se zove cilj. Ako
u programu postoje činjenice
koje ispunjavaju cilj, Prolog će
odgovoriti ‘true’, a inače će
odgovoriti ‘false’.
• Sam postupak ispunjavanja
ciljeva u Prologu se naziva
usklađivanje ili matching, a
odgovara unifikaciji varijabli u
logici.
Usklađivanje (matching)
• Postupak koji kao ulaz uzima dva terma i provjerava odgovaraju li
međusobno. Ako ne odgovaraju, postupak propada (fails). Ako
odgovaraju, postupak uspijeva (succeeds) i varijable preuzimaju
vrijednosti odgovarajućih konstanti ili varijabli.
Primjer:
datum(D, M, 2006)
datum(D1, prosinac, G)
• Opća pravila:
• Ako su S i T konstante, međusobno odgovaraju samo ako su to isti
pojmovi
• Ako je S varijabla, a T bilo što drugo, onda međusobno odgovaraju i
S poprima vrijednost T
• Ako su S i T strukture, onda međusobno odgovaraju samo ako:
• imaju isti funktor
• su usklađeni svi njihovi argumenti
Usklađivanje (matching)

• U slučaju kada Prolog baza Primjer jednostavnih


podataka, kao i upit, sadrži upita:
samo činjenice, ?- mjesto(soba1).
usklađivanje uspijeva ako (true.)
su ispunjeni sljedeći uvjeti:
• ako su predikat ?- mjesto(kuhinja).
imenovan u cilju i false.
predikat u bazi istoimeni ?- lokacija(jabuka, soba2).
• ako imaju jednaku false.
kratnost ?- lokacija(jabuka, stol).
• ako su im argumenti (true.)
jednaki
Varijable u upitima

• U upitima se mogu dodati


varijable, što daje novu
dimenziju usklađivanju.
• Varijable Prologa se
ponašaju nešto drugačije
nego varijable standardnih
programskih jezika, pa se
nazivaju logičke varijable.
Usklađivanje upita s varijablama
• Kad se u upitu javljaju ?- mjesto(X). ?- lokacija(Stvar, stol).
varijable, prva dva
koraka usklađivanja X = šuma ; Stvar = jabuka ;
(uspoređivanje imena X = soba1 ; Stvar = napitak1 ;
predikata i broja X = soba2 ; Stvar = napitak2.
argumenata) se ne X = soba3 ;
mijenjaju. X = podrum ; ?- lokacija(Stvar, Mjesto).
• Kod trećeg koraka X = hodnik1 ; Stvar = komoda,
usklađivanja varijabla X = hodnik2 ; Mjesto = soba1 ;
može predstavljati bilo X = stepenice. Stvar = krevet,
koji term. Mjesto = soba1 ;
• Tek nakon uspješnog ...
usklađivanja varijabla Stvar = izbočina,
će poprimiti vrijednost Mjesto = podrum.
terma kojim je
zamijenjena. Taj se
postupak naziva
vezanje varijable.
Govorili smo o…

You might also like