Professional Documents
Culture Documents
Ana-Marija Balen
Mentor:
Dr. sc. Sandra Lovreni
Varadin, 2015.
SVEUILITE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
VARADIN
Ana-Marija Balen
Broj indeksa: 42605/13-R
Diplomski studij
Smjer: Baze podataka i baze znanja
Mentor:
Dr. sc. Sandra Lovreni
Varadin, 2015.
Sadraj
1.
Uvod ................................................................................................................................... 4
2.
2.2.
Predikati ...................................................................................................................... 5
2.3.
Pravila.......................................................................................................................... 6
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
3.
4.
5.
6.
Zakljuak .......................................................................................................................... 22
7.
Literatura .......................................................................................................................... 23
1. Uvod
Rezervacija kino ulaznica je ve due vrijeme sasvim normalan pojam i korisnici ga obavljaju
samostalno, putem interneta. Aplikaciju Rezervacija kino ulaznica mogue je implementirati
u jeziku Prolog to u prikazati u ovome seminaru. Aplikacija e imati mogunosti prikaza
popisa svih filmova koji trenutno igraju u kinu, mogunost prikaza termina predstave
selektirano po nazivu filma. Moi e se takoer izlistati svi trenutni filmovi koji igraju u kinu
s podacima o terminu, anru filma i informacije u kojem kinu se prikazuje taj film. Zadnja, ali
najbitnija stavka je rezervacija ulaznica koja je omoguena korisnikim imenom, ifrom filma
i brojem ulaznica koje se ele rezervirati. Rezervacijom ulaznica broj slobodnih ulaznica se
aurira u bazi znanja.
2.1.
Dinamiki predikat
2.2.
Predikati
Predikati su injenice specijalnih vrsta pravila bez tijela i vrata. Njima definiramo bazu znanja.
U primjeru projekta, film je predikat iji je argument naziv filma.
film(hobit).
film(igre_gladi).
film(interstellar).
film(koko3).
film(ninja_turtles).
film(preglup_i_pregluplji).
film(pingvini_s_madagaskara).
2.3.
Pravila
glava :- tijelo
Pravila omoguuju definiranje odnosa meu predikatima bez da se oni eksplicitno definiraju
za svaku instancu argumenata.
ulaznica(Naziv,Sifra,Kolicina):predstava(Naziv,Sifra,_,_,_,_),slobodno(Sifra,Kolicina).
2.4.
Anonimna varijabla
Anonimna varijabla - slui za definiranje varijabli koje koristimo samo jednom u klauzuli.
Anonimna varijabla je takoer koritena u gornjem primjeru. Oznaava se donjom crtom _,
ili ak anonimne varijable s imenom koje se oznaavaju _Ime.
2.5.
Predikat za ulaz - write / 1 ispisuje na zaslon term koji mu je argument. Usklaivanje predikata
uspijeva uvijek kod poziva, a kod ponavljanja javlja neuspjeh. Argument moe biti ili varijabla
koritena u programu ili bilo koji string.
Predikat za izlaz read / 1 navodi korisnika da upie neke podatke, a podatke sprema u
varijablu koja mu je argument.
Npr. u pravilu termini_filma/0 kojim biramo za koji film elimo pogledati termine predstava,
write ispisuje pitanje, a read sprema upisani pojam u varijablu Film koju kasnije koristi u
daljnjim upitima nad bazom.
termini_filma
:-
write('Koji
film
popisa
biste
eljeli
pogledati?'), nl,
read(Film), nl,
write('Ovo
write('.').
su
termini
prikazivanja
filma
'),
write(Film),
2.6.
nl / 0 vri na zaslonu prelazak u novi red. Usklaivanje predikata odvija se jednako kao i
kod write / 1.
tab / 1 na zaslon ispisuje onoliko razmaka koliko mu kazuje broj koji mu je argument.
Usklaivanje predikata odvija se jednako kao i kod write / 1.
fail / 0 - usklaivanje ovog predikata nikada neuspijeva.
popis:write('Prikazujemo
listu
svih
filmova
koje
moete
pogledati:'),nl,
write('ifra'),tab(5),write('Naziv'),tab(8),write('Vrijeme'),
tab(8),write('Zanr'),tab(8),write('Trajanje'),tab(7),write('Ki
no'), nl,
write('=======================================================
======================'), nl,
predstava(Naziv,Sifra,Vrijeme,Zanr,Trajanje,Kino),
write(Sifra),
tab(5),
tab(7),
write(Zanr),
write(Naziv),
tab(5),
tab(5),
write(Vrijeme),
write(Trajanje),
tab(10),
Da na kraju ovog pravila nismo stavili predikat fail, trebali bi traiti svaki novi red. U ovom
sluaju program ispie sve redove koje moe pronai u bazi, a ne samo prvi red koji zadovolji
pravilo.
2.7.
2.8.
Aritmetiki operatori
Da bi prolog mogao biti koriten u realnim situacijama, mora podravati aritmetiku. Problem
je to vrednovanje aritmetikih izraza nije u skladu s Prologovim osnovnim konceptom rada.
Ugraeni operator is / 2 vrednuje svoj drugi argument i usklauje ga s prvim argumentom. Na
taj se nain postie vrednovanje aritmetikog izraza i dodjeljivanje njegove vrijednosti prvom
argumentu.
Primjer moemo pronai u gore navedenom kodu gdje se definira NovaKolicina kao
Kolicina (stara) minus eljeni Broj ulaznica. Iz navedenog primjera jasno vidimo da je
koriten takoer i aritmetiki znak za oduzimanje.
Osim aritmetikih izraza, u realnim aplikacijama se brojevi usporeuju. Prolog ima ugraene
predikate za obavljanje usporedbe.
Prefix
Infix
Uspijeva ako je
=<(X,Y)
X =< Y
>=(X,Y)
X >= Y
=(X,Y)
X=Y
X jednako Y
<(X,Y)
X<Y
X manje od Y
>(X,Y)
X>Y
X vee od Y
\=(X,Y)
X \= Y
X nejednako Y
U svom projektu koristila sam operator vee ili jednako ime u bazi provjeravamo imamo li
dovoljnu koliinu karata na zalihi prije nego to se izvri rezervacija.
2.9.
Na navedenom primjeru moemo objasniti i kontrolnu strukturu if then- else. Ona u Prologu
izgleda malo drugaije nego u ostalim programskim jezicima, a njezina srtuktura izgleda
ovako:
cilj1 -> cilj2; cilj3
Struktura if then else ita se na sljedei nain: Ako uspije cilj1, unificira se cilj2. Ako ne
uspije cilj1, Prolog pokuava cilj3.
U naem primjeru to funkcionira ovako: ako je korisnik kod narudbe unio ispravno korisniko
ime, ifru filma i broj eljenih karata, baza znanja e se aurirati, broj karata uz odreeni film
e se obrisati i unijet e se prijanja vrijednost umanjena za broj rezerviranih karat. Ukoliko
na prvi cilj ne uspije, odnosno ako navedeni podaci nisu ispravno uneseni, program izbacuje
poruku upozorenja da podaci nisu ispravni.
Opis
korisnik / 2
film / 1
predstava / 6
slobodno / 2
ulaznica / 3
popis_filmova / 0
termini_filma / 0
popis / 0
br_ulaznica / 0
start / 0
narudzba / 3
slobodno(kok3, 56).
slobodno(nt01, 32).
slobodno(nt02, 76).
slobodno(nt03, 56).
slobodno(pip1, 75).
slobodno(pip2, 44).
slobodno(pip3, 55).
slobodno(pm01, 33).
slobodno(pm02, 47).
slobodno(pm03, 36).
nl,
nl,
write('Sifra'),
tab(4),
write('Vrijeme'),
tab(5),
tab(8),
write(Trajanje),
tab(11),
write(Kino),
tab(5),
definiranje
predikata
popis/0
koji
ispisuje
sve
filmove
njihove
koje
mozete
write('Vrijeme'),
tab(6),
informacije.
popis
:-
pogledati:'),
write('Prikazujemo
nl,
nl,
listu
write('Sifra'),
svih
tab(5),
filmova
nl,
write('====================================================================
========='), nl,
predstava(Naziv,
tab(7),
Sifra,
Vrijeme,
write(Vrijeme),
tab(7),
Zanr,
Trajanje,
write(Trajanje),
Kino),
write(Sifra),
tab(11),
write(Kino),
Sifra,
Kolicina),
write(Sifra),
tab(8),
definiranje
pravila
start/0
kojim
korisnik
dobiva
opcije
koje
moe
koristiti u programu.
start :- write('Dobrodosli u najveci izbor kino predstava.'), nl,
write('> Za popis filmova odaberite opciju popis_filmova.'), nl,
write('> Ako zelite vidjeti kada i u kojem kinu igra odredjeni film,
odaberite opciju termini_filma.'), nl,
write('>
Za
popis
slobodnih
mjesta
dvorani
odaberite
opciju
br_ulaznica.'), nl,
write('> Za popis svih filmova odaberite opciju popis.'), nl,
write('> Za ispunjavanje narudzbe vasim imenom i sifrom izabranih
ulaznica odaberite opciju narudzba.').
5. Primjer izvoenja
1 ?- start.
Dobrodosli u najveci izbor kino predstava.
> Za popis filmova odaberite opciju popis_filmova.
> Ako zelite vidjeti kada i u kojem kinu igra odredjeni film,
odaberite opciju termini_filma.
>
Za
popis
slobodnih
mjesta
dvorani
odaberite
opciju
br_ulaznica.
> Za popis svih filmova odaberite opciju popis.
> Za ispunjavanje narudzbe vasim imenom i sifrom izabranih
ulaznica odaberite opciju narudzba.
true.
2 ?- popis_filmova.
Ovo su filmovi koji trenutno igraju u nasem kinu:
hobit
igre_gladi
interstellar
koko3
ninja_turtles
preglup_i_pregluplji
pingvini_s_madagaskara
false.
3 ?- termini_filma.
Koji film s popisa biste zeljeli pogledati?
|: hobit.
Ovo su termini prikazivanja filma hobit.
Sifra
Vrijeme
Trajanje
Kino
Zanr
=========================================================
hob1
19:30
145
aMall
avantura
hob2
20:15
145
arena
avantura
hob3
21:20
145
bCent
avantura
hob4
22:10
145
arena
avantura
hob5
22:45
145
arena
avantura
false.
4 ?- br_ulaznica.
Trenutno je broj slobodnih ulaznica:
Sifra
Kolicina
================
hob1
25
hob2
53
hob3
67
hob4
45
hob5
75
igr1
23
igr2
57
igr3
34
igr4
78
int1
64
int2
56
int3
23
kok1
77
kok2
45
kok3
56
nt01
32
nt02
76
nt03
56
pip1
75
pip2
44
pip3
55
pm01
33
pm02
47
pm03
36
true.
5 ?- popis.
Prikazujemo listu svih filmova koje mozete pogledati:
Sifra
Vrijeme
Trajanje
Kino
Zanr
Naziv
=============================================================================
hob1
19:30
145
aMall
avantura
hobit
hob2
20:15
145
arena
avantura
hobit
hob3
21:20
145
bCent
avantura
hobit
hob4
22:10
145
arena
avantura
hobit
hob5
22:45
145
arena
avantura
hobit
igr1
18:15
125
arena
avantura
igre_gladi
igr2
20:20
125
aMall
avantura
igre_gladi
igr3
21:30
125
bCent
avantura
igre_gladi
igr4
22:15
125
arena
avantura
igre_gladi
int1
21:10
169
arena
akcija
int2
22:10
169
aMall
akcija
interstellar
int3
23:10
169
bCent
akcija
interstellar
kok1
16:15
90
bCent
dj_avantura
koko3
kok2
18:15
90
aMall
dj_avantura
koko3
kok3
17:20
90
arena
dj_avantura
nt01
19:30
101
arena
avantura
ninja_turtles
nt02
19:45
101
aMall
avantura
ninja_turtles
nt03
21:40
101
bCent
avantura
ninja_turtles
pip1
19:45
110
bCent
komedija
preglup_i_pregluplji
pip2
20:30
110
aMall
komedija
preglup_i_pregluplji
pip3
22:50
110
arena
komedija
pm01
15:30
92
pm02
17:15
92
aMall
animirani
pingvini_s_madagaskara
pm03
18:45
92
bCent
animirani
pingvini_s_madagaskara
arena
animirani
interstellar
koko3
preglup_i_pregluplji
pingvini_s_madagaskara
true.
8 ?- br_ulaznica.
Trenutno je broj slobodnih ulaznica:
Sifra
Kolicina
================
hob1
21
hob2
53
hob3
67
hob4
45
hob5
75
igr1
23
igr2
57
igr3
34
igr4
78
int1
64
int2
56
int3
23
kok1
77
kok2
45
kok3
56
nt01
32
nt02
76
nt03
56
pip1
75
pip2
44
pip3
55
pm01
33
pm02
47
pm03
36
true.
6. Zakljuak
Prolog je logiki programski jezik i ima mogunost implementirati logike igre i rijeiti logike
probleme. U ovom seminaru sam implementirala rezervaciju karata kao jednog od logikih
problema. Rezervacija karata je uobiajena stvar i na ovaj nain sam pokazala da se moe
isprogramirati i u ovakvom programskom jeziku. Iskoristila sam mnoge ugraene predikate,
ali i definirala svoja pravila kako bi aplikacija postala funkcionalna. Smatram da je Prolog vrlo
dobro rjeenje za ovakav problem jer se u jednoj datoteci moe stvoriti baza znanja te lako
raditi operacije nad njom.
7. Literatura
[1] Predavanje s kolegija Uvod u formalne metode - Prolog, Fakultet organizacije i informatike,
Varadin, 2013.
[2] S Interneta: http://www.swi-prolog.org/
[3] Forum kolegija Logiko programiranje, Fakultet organizacije i informatike, Varadin http://autopoiesis.foi.hr/wiki.php?name=Logi%C4%8Dko+programiranje+-+FOI
[4] S Interneta: http://en.wikipedia.org/wiki/Prolog