W-Prolog
Pregled sadržaja
1. Uvod
1.1 Distribucija
2. Jezik
3. Upotreba
3.1 Ugrađena W-Prolog mašine
4. Korisnički interfejs
4.1 Aplet (mini aplikacija)
4.2 Aplikacije
5. Komentari
5.1 Bagovi (programske greške)
5.2 Dalji rad
6. Povezani radovi
Prilozi
A. Istorija
B. Pravne napomene
|
Nova verzija (1.2.1) ispravlja greške kod unifikacije varijabli.
1. Uvod
W-Prolog je interpreter (prevodilac) za Prolog jezik implementiran u Java programu. Implementacija je
izuzetno prenosiva i može se pokrenuti
kao mali program (aplet) unutar web pretraživača , koji omogućavaju rad Java programa.
W-Prolog ima lepši korisnički interfejs od većine Prolog sistema (koji obično omogućavaju
rad putem komandnih linija). On obezbeđuje
jednostavno praćenje, a opciono omogućava proveru dešavanja.
W-Prolog sistem je mali i relativno jednostavan. Međutim, nije naročito brz.
W-Prolog je:
1.1 Distribucija
W-Prolog je dostupan kao izvorni kod
(WProlog.java), i kao zip fajl, koji sadrži fajlove sa klasama
(
wp.zip).
Novi W-Prolog je sada dostupan i preko linka za jar file
(wp.jar)
Ukoliko želite da probate W-Prolog sada (i gledate ovo preko pretraživača sa Java mogućnostima) samo kliknite na dugme ispod.
2. Jezik
Jezik je dat preko jednostavne gramatike u nastavku:
Program ::= Rule | Rule Program
Query ::= Term
Rule ::= Term . | Term :- Terms .
Terms ::= Term | Term , Terms
Term ::= Number | Variable | AtomName | AtomName(Terms)
| [] | [Terms]
| [Terms | Term]
| print(Term)
| nl
| eq(Term , Term)
| if(Term , Term , Term)
| or(Term , Term )
| not(Term)
| call(Term)
| once(Term)
Number ::= Digit | Digit Number
Digit ::= 0 | ... | 9
AtomName ::= LowerCase | LowerCase NameChars
Variable ::= UpperCase | UpperCase NameChars
NameChars ::= NameChar | NameChar NameChars
NameChar ::= a | ... | z | A | ... | Z | Digit
Komentar počinje sa % i završava se na kraju reda ili
počinje sa /* i završava se */.
Obratite pažnju na to da verzija 1.2 kod forme p(X) :- X neće raditi.
Umesto toga, koristite novi ugrađeni call na sledeći način:
p(X) :- call(X).
Imajte na umu, da odredbe koje definišu predikat moraju biti kontinualne.
Tako, na primer, koristiti:
a :- b.
a :- c.
b :- defn.
c :- defn.
a ne:
a :- b.
b :- defn.
a :- c.
c :- defn.
3. Upotreba
W-Prolog se može pokrenuti kao aplet (mali program u okviru Java aplikacije) ili
kao samostalna aplikacija. Može biti ugrađen ili pozvan od strane nekog drugog programa.
Da pokrenete W-Prolog kao aplet napravite HTML fajl , koji sadrži tag:
<center>
<h1>W-Prolog</h1>
<applet code=WProlog.class width=120 height=65>
</applet>
</center>
i koristite netscape (ili internet explorer) za pregled ovog fajla.
Alternativno, možete iskoristiti adresu
http://www.cs.rmit.edu.au/~winikoff/wp/.
Da pokrenete W-Prolog kao samostalnu aplikaciju treba vam Java Development Kit (JDK). Komanda je java WProlog pri čemu folder, koji sadrži fajlove sa klasama, mora biti naveden u CLASSPATH.
3.1 Ugrađena W-Prolog mašine
Mašina za izvođenje W-Prolog-a se može pozvati iz Java koda. Program Go.java pokazuje kako se to radi.
4. Korisnički interfejs
Korisnički interfejs je različit u apletima. Apostrofiramo prvo zajedničke aspekte.
Gornji red (označen kao Query) sadrži polje za tekst u koje se može upisati Prolog atom (npr. append(X,Y,[1,2,3,4]) - obratite pažnju da nije neophodno staviti tačku na kraju). Prvo dugme (Run Query) će pokrenuti izvršenje upita (query-ja), a drugo (More) će tražiti alternativna rešenja za uspešan upit (query).
Tekst na vrhu (označen sa Program) sadrži programski tekst. Tekst na dnu (označen sa Results) sadrži izlaz iz W-Prolog-a. Dugme markirano sa Clear briše tekst sa rezultatom. Dve opcione (toggle) kontrole (Occur Check i Trace) navode redom da li se vrši provera izvršavanja ili je izlaz tražena informacija.
Da biste prekinuli W-Prolog možete, ili da kliknite na dugme za zatvaranje prozora (ukoliko ga nudi vaš window manager ili koristite Windows) , ili da selektujte Quit iz menu-a.
4.1 Aplet
![[Picture of WProlog Applet]](http://waitaki.otago.ac.nz/~michael/wp/screen/win95net.jpg)
Apleti (mali programi koji rade u okviru šireg programskog okruženja) imaju brojna ograničenja - npr. oni ne mogu da upisuju u fajlove ili otvaraju mrežne veze na proizvoljnim mašinama. Kao posledica toga , a i zbog brojnih grešaka u netscape-u, aplet verzija W-Prolog-a ne dopušta učitavanje i snimanje programa.
Aplet verzija W-Prolog-a ima četiri tastera:
- Benchmark(test program):
- Pokreće standardni test program. Formula
496 / runtime daje brzinu izvođenja logičkih operacija u sekundi.
- About(O čemu se radi)...:
- Daje kratke informacije o autoru
(Michael Winikoff)
i o tome koja je verzija u pitanju (trenutno 1.2) i to u programskom polju za tekst.
- Append(Dodatak):
- Postavlja jednostavan dodatni program u polje za tekst.
- Documentation(Dokumentacija):
- Otvara prozor pretraživača sa ovim fajlom.
4.2 Aplikacija
![[Picture of WProlog Application]](http://waitaki.otago.ac.nz/~michael/wp/screen/applic.jpg)
Kada se izvršava kao samostalna aplikacija, umesto četiri dugmeta, nudi se mogućnost učitavanja ili snimanja fajla. Naziv fajla se prikazuje u polju za tekst označenim sa File: , koje se ne može menjati. Dugme Load (Učitaj) izbacuje standardni zahtev za odabir fajla i učitava selektovano. Dugme Save (Snimi) upisuje program u fajl iz koga je i učitan.
5. Komentari
Preporuka je da se W-Prolog izvršava kao samostalna aplikacija. Ranije verzije W-Prolog-a podržavaju učitavanje fajlova u aplet verziji. Ovo savršeno radi kada se pokreće sa Sun-ovim appletviewer-om, ali odbija da radi pod netscape-om.
Još jedan primer neželjenog ponašanja pod netscape-om tiče se nadovezivanja. Svaki upit (query) u W-Prolog-u izvršava se u nizu. Ovo znači da dugo (neprekinuto) izvršavanje upita (query-ja) neće zamrznuti interfejs (mada će to usporiti upite koji slede). Ovo radi, ali ne i kod netscape-a.
5.1 Bagovi (programske greške)
Trenutno se ne zna za bilo kakve greške. Molim vas
da me obavestite ukoliko neku pronađete.
5.2 Dalji rad
U ovom trenutku ne očekujem da ću imati vremena za proširenje W-Prolog-a u bliskoj budućnosti. Buduća proširenja bi uključivala:
- Aritmetiku
Novo
Joachim Wolf Laudien je predložio da se koriste sledeći predikati kako bi se obezbedila aritmetika:
sum(X, zero, X).
sum(X, succ(Y), succ(Z)) :- sum(X, Y, Z).
product(X, zero, zero).
product(X, succ(Y), Z) :- sum(X, P, Z), product(Y, X, P).
- Karaktere i stringove
- Input (Ulaz)
- Grafiku i druge pristupe Java bibliotekama (npr. umrežavanje - networking)
- Iterativno proširenje (Iterative Deepening)
- Primere programa
6. Povezani radovi
Paul Tarau i Bart Demoen su napisali Prolog interpreter u Javi. Njihov interpreter kompajlira Prolog (i brži je), ali nema grafički interfejs (GUI-graphical user interface). Njihov rad je dostupan na
http://www.cs.kuleuven.ac.be/~bmd/PrologInJava/.
Još jedan Prolog prevodilac (interpreter) u Javi može se naći
ovde.
Nažalost, izgleda da koristi Lisp-ese sintaksu i nema dokumentaciju!
Najnovije informacije:
Od kako sam napisao W-Prolog i ovu stranicu, pojavile su se brojne druge implementacije logičkih programskih jezika uz korišćenje Jave (uključujući LL, JavaLog, Jinni i MINERVA). Možete pronaći linkove ka svemu ovom na
Robert Tolksdorf-ovoj
strani na
Jezici za Java VM.
A. Istorija
Version 1.0
Ovo je početno izdanje iz oktobra 1996. Izvršava aplet program u prozoru pretraživača. Moj prvi Java program, napisan za nešto više od nedelju dana. W-Prolog 1.0 je bio prvi Prolog prevodilac napisan u Javi. Njegovo izdanje je pratilo izdanje Demoen i Tarau kompajlera (koji je, u stvari, kompajlirao i izvršavao Prolog kod u avgustu 1996).
Version 1.1
- Promenjen korisnički interfejs.
- Dodata mogućnost snimanja fajla ukoliko se izvršava kao aplikacija.
- Ukoliko se pokreće kao aplikacija W-Prolog koristi zahtev za pronalaženje fajla kod učitavanja i snimanja.
- Ukoliko radi kao aplet ptogram W-Prolog se pokreće u svom sopstvenom prozoru.
- Promenjen podrazumevani font.
- Uklonjene sve opcije.
- Ispravljena greška kod izvršavanja - uvek se vrši provera dešavanja ...
- Ispravljen bag: ukoliko upit ne može da se rasčlani tada se naglašava njegov deo koji je uzrok problema. Ranije bi program bio naglašen ukoliko upit ima sintaksnu grešku.
- Izvesne optimizacije - pronalaženje klauzula se vrši samo jednom umesto pri svakom izvršnom koraku.
- Dodata indikacija za memoriju, koja se koristi.
- Promenjena mašina kako bi se omogućila lakša ugradnja u druge aplikacije.
Version 1.2
- Ponovo promenjen korisnički interfejs -- uklonjena opcija učitavanja u aplet programima.
- Ispravljena greška kod indeksiranja.
- Dodat poziv.
- Dodato upravljanje za QUIT događaj.
Version 1.2.1
- Ispravljen bag pri kome se varijable udružuju međusobno tako da kreiraju kružnu vezu, a pri tome ne rade ništa.
B. Pravne napomene
Slobodno koristite W-Prolog u privatne svrhe ili za akademska istraživanja i edukaciju. Molim vas da me
kontaktirate u slučaju drugačijeg korišćenja (npr., uključivanje W-Prolog-a na CD ili u arhivu).
.
Prilikom kopiranja, držite sve fajlove zajednor (uključujući i ovu dokumentaciju) i nemojte ništa menjati.