Transcript

Prikaz Jekejeke Runtime Prolog aplikacije za Android platformu ______________________________________________________

Sadraj

Uvod2Jekejeke Runtime Prolog3Opisivanje relacija u Jekejeke Prologu4Primer 1.4Liste u Jekejeke Runtime Prolog aplikaciji6Primer 2.6Primer 3.8Primer 4.10Zakljuak12Literatura13

Uvod

Vetaka inteligencija je grana raunarstva koja se bavi problemima koje ljudi jo uvek bolje reavaju od raunara. Primer takvog tekog problema je razumevanje prirodnog jezika. Tokom niza godina, istraivai su pokuavali razumeti i formalizirati procese koji ine ono to nazivamo inteligencijom. Pokazalo se da su za prirodno i jednostavno izraavanje otkrivenih formalizama vrlo pogodni deklarativni programski jezici, koji omoguuju izraavanje problema u obliku skupa uslova, dok raunar pronalazi reenje kao skup vrednosti za koje su uslovi zadovoljeni. Prolog kao deklarativni programski jezik podrazumijeva programiranje u dve faze:

1. opisivanje problema na nain svojstven jeziku2. upita kojim programu kaemo ta tano elimo saznati.

Naravno, da bi takav mehanizam bio mogu, deklarativni jezik mora u sebi sadrati implicitne algoritme za obradu to ograniava podruje primjene jezika. Deklarativni programski jezici posebno su prikladni za izradu prototipova jer apstrahuju detalje izvoenja niskog levela kao to su rukovanje memorijom ili redosled izvoenja.

Prolog je programski jezik za simboliku numeriku obradu. Temelji se na predikatskoj logici prvog reda i koristi ogranienu verziju uzronog oblika poznatu kao Hornov uzroni oblik. Za primere u radu je korien prolog za android pod nazivom "Jekejeke Runtime Prolog". Za demonstraciju su ubaeni ScreenShot sa ureaja Alcatel OneTouch 992D i Samsung Galaxy S4 koji rade na Android operativnom sistemu, na kojima su instalirane Jekejeke Runtime Prolog aplikacije preuzete sa Google Store.

Jekejeke Runtime Prolog

Jekejeke Runtime Prolog je aplikacija napisana za android operativni sistem koja omoguava programiranje na predikatskom jeziku. Pri pokretanju Jekejeke Prolog programa otvara se Init prozor u kojem se upisuju relacije. U prozoru Thread dodajemo upite za izvravanje. Nakon svakog upita stavljamo "." i pritisnemo Enter da bi se komanda izvrila. Po pokretanju programa dobijamo izgled ekrana kao na Slici 1.

Slika 1. Poetni ekran programa JekeJeke

Opisivanje relacija u Jekejeke ProloguPrimer 1.

Za primer emo uzeti relaciju roditelj.roditelj(pera, milica)roditelj(pera, jovica)roditelj(zika, dragica)roditelj(zika, marica)roditelj(dragana, milica)roditelj(dragana, jovica)

U Init prozor upisujemo date relacije.

Slika 2. Relacija roditelj u Jekejeke Prologu

U prvom upitu je postavljeno pitanje da li je Pera Jovicin roditelj.

roditelj(pera, jovica).

Nakon odgovora postavljamo pitanje da li je Zika Jovicin roditelj.

roditelj(zika, jovica).

Nakon odgovora postavljamo upit ko je Milicin roditelj. Sa komandom ";" izlistavamo sledei odgovor jer su u primeru navedena oba Milicina roditelja.

roditelj(X, milica).

Nakon odgovora postavljamo upit da li su Milica i Dragica sestre.

roditelj(X, dragica), roditelj(X, marica).

Kao odgovor smo dobili da je Zika njihov roditelj to implicira da su Milica i Dragica sestre.

Slika 3. Upiti za relacije roditeljListe u Jekejeke Runtime Prolog aplikaciji

Lista je rekurzivno definisana struktura koja se u prologu koristi vrlo esto. Formalno, lista moe biti ili prazna (oznaka [ ] ), ili dvolana struktura (Glava,Rep), gde je Glava prvi element liste, a Rep ponovo lista koja sadri ostale elemente poetne liste. Elementi liste mogu biti proizvoljni objekti. Radi jednostavnosti, dozvoljavaju se i alternativni zapisi, korienjem uglastih zagrada i uspravne crte.Primer 2.

Sledei primer koji prikazujemo u Jekejeke Runtime Prolog aplikaciji je vezan za liste.U njemu traimo prikaz n-tog elementa liste.

element_at(X,[X|_],1).element_at(X,[_|L],K) :- K > 1, K1 is K - 1, element_at(X,L,K1).

U Init prozor upisujemo date relacije.

Slika 4. prikaz n-tog elementa listeU upitu zadajemo listu sa proizvoljnim elementima, i traimo da nam ispie trei element te liste.

element_at(X,[a,b,c,d,e],3).

Slika 5. Upit prikaza treeg elementa liste

Kao odgovor dobijamo "X=c".

Primer 3.

U primeru 3 se trai eliminisanje uzastopnih duplikata elemenata te liste.

compress([],[]).compress([X],[X]).compress([X,X|Xs],Zs) :- compress([X|Xs],Zs).compress([X,Y|Ys],[X|Zs]) :- X \= Y, compress([Y|Ys],Zs).

U Init prozor upisujemo date relacije.

Slika 6. Eliminisanje uzastopnih duplikata elemenata liste

U upitu zadajemo listu sa proizvoljnim elementima koji se ponavljaju uzastopno, i traimo da nam ispie novu listu X sa elementima bez ponavljanja.

com([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X).

Slika 7. Upiti eliminisanje uzastopnih duplikata elemenata liste

Kao odgovor dobijamo "X= [a,b,c,a,d,e]".

Primer 4.

U primeru 4 se trai grupisanje istih uzastopnih elemenata i njihovo stavljanje u podliste.

elementi([],[]).elementi([X|Xs],[Z|Zs]) :- transfer(X,Xs,Ys,Z), elementi(Ys,Zs).transfer(X,[],[],[X]).transfer(X,[Y|Ys],[Y|Ys],[X]) :- X \= Y.transfer(X,[X|Xs],Ys,[X|Zs]) :- transfer(X,Xs,Ys,Zs).

U Init prozor upisujemo relacije date u Listingu 2.

Slika 8. Grupisanje istih uzastopnih elemenata

U upitu zadajemo listu sa proizvoljnim elementima koji se ponavljaju uzastopno, i traimo da nam ispie novu listu X sa podlistama istih elemenata.

elementi([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X).

Slika 9. Upiti za grupisanje istih uzastopnih elemenata

Kao odgovor dobijamo " X = [[a,a,a,a],[b],[c,c],[a,a],[d],[e,e,e]]".

Zakljuak

Jekejeke Prolog funkcionie kao i bilo koji desktop program za programiranje na predikatskom jeziku. Prednost mu je to je besplatan, lako se instalira, koristi i uvek je dostupan za razliku od desktop programa.

Za primere u radu je korien prolog za android pod nazivom "Jekejeke Runtime Prolog". Za demonstraciju su ubaeni ScreenShot sa ureaja Alcatel OneTouch 992D i Samsung Galaxy S4 koji rade na Android operativnom sistemu, na kojima su instalirane Jekejeke Runtime Prolog aplikacije preuzete sa Google Store.

Literatura

[1] http://www.jekejeke.ch/idatab/doclet/intr/en/docs/package.jsp [2] https://play.google.com/store11*David Maravi*Nemanja Tei