Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

W-Prolog


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.

[There would be a Prolog interpreter here if your browser supported Java]

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] 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] 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.



Published (Last edited): 22-05-2013 , source: http://waitaki.otago.ac.nz/~michael/wp/