Projekt zakończony
Piotr, Strzelczyk, pit.strzelec@gmail.com
Integracja kodu Prologu z Java
porównać z projektami z 2006 roku http://www.ugosweb.com/jiprolog/ http://portal.acm.org/citation.cfm?id=787039 http://www.sics.se/sicstus|SICStus]]
patrz https://ai.ia.agh.edu.pl/wiki/prolog:prolog_tools#java_and_prolog
InterProlog http://www.declarativa.com/interprolog/, description, how to use, does it make any sense?
Opis wniosków (legenda):
JIProlog
Link: http://www.ugosweb.com/jiprolog/index.aspx
Opis: 8min - poddanie się z próbą uruchomienia apletu
Bardzo szybko znalezione API (odrazu link)
Wygląda obiecująco, bo jest to program napisany w języku Java oraz pozwala integrować w bardzo łatwy sposób Prolog'u z Javą. Predykaty Prologu mogą być uruchamiane z poziomu javy (opis na stronie)
Forum dość ubogie, mało odnośnie samego kodowanie. Główne tematy związane bardziej z middletami i wykorzystaniem jiprolog na komórki. Forum dwujęzyczne (włoski, angielski), więc nie które tematy są w innym języku (włoskim) niż angielski (przeglądnięcie tylko samych tematów).
Manual jest w download-ach, więc znalezienie jego zajmuje trochę czasu (nie widać linku na głównej stronie).
Manual 73 strony (przeglądnięta na szybko przelotem) wnioski:
Wniosek: OK!
Link: http://portal.acm.org/citation.cfm?id=787039
Opis: Program do analizy programów napisany po części w Javie po części w Prologu. Wygląda na to, że raczej strona mało użyteczna, jeżeli chodzi o integrację Prolog → Java.
Wniosek: OUT!
SICStus 4 Link: http://www.sics.se/isl/sicstuswww/site/index.html
Opis: Wygląda na to, że umożliwia integrację Prologu z serwerami Javy oraz Javę z serwerem Prologu!
Manual 1246 stron (przeglądana na szybko przelotem) wnioski:
Wniosek: OK, NEUTRAL!
Declarativa InterProlog Link: http://www.declarativa.com/interprolog/
Opis: Strona bardzo prosta, przejrzysta i szybko można znaleść tego czego się potrzebuje.
Manual w pliku .doc (przeglądana na szybko przelotem) wnioski:
Opis mechanizmu działania (bardzo ogólne wnioski, po przeglądnięciu dokumentacji przelotem: Najprawdopodobniej uruchamiany jest 'silnik' prologu, następnie nasłuchiwacz (listener) Prologu. Same zapytania wysyłane są string-iem, zgodnie z konwencją prologu.
Wniosek: OK!
JPL swi-prolog
Link: http://www.swi-prolog.org/packages/jpl/java_api/index.html
Opis: Działa tylko z użyciem SWI-Prolog
Strona prosta i łatwa w przeglądzie i znajdywaniu informacji
Manual w formie HTML (przeglądana na szybko przelotem) wnioski:
Wniosek: OK!
Link: http://www.jaist.ac.jp/~fuji/work/docs/html4/jpro_p2.html
Opis: Strona z bardzo dobrym przykładem użycia JPL.
Wniosek: OK ( → JPL)!
PrologCafe
Link: http://kaminari.istc.kobe-u.ac.jp/PrologCafe/
Opis: Na stronie pisze, że bazuje na jProlog, ale link przekierowuje na stronę JLog
Wniosek: OUT!
jProlog
Link: http://www.cs.kuleuven.ac.be/~bmd/PrologInJava/
Opis: Wyglada na to, że są to własne napisane klasy, umożliwające korzystanie z Prologu pod Javą. Brak jakichkolwiek dokumentacji, sam kod umieszczony na stronie. Tworzenie termów itd jest możliwe przez odpowiednie funkcje.
Wniosek: NEUTRAL!
Link: http://ktiml.mff.cuni.cz/~bartak/prolog/implementations.html#prolog_in
Opis: Strona zestawiające projekty łączące Prolog z Javą
Wniosek: INFO!
Link: http://www.robert-tolksdorf.de/vmlanguages.html
Opis: Strona zestawiająca integrację innych języków programowania z JVM. Znajduje się tutaj również Prolog.
Wniosek: INFO!
JLog
Link: http://jlogic.sourceforge.net/
Opis: Wygląda na to, że jest to tylko interpreter Prologu napisany w Javie.
Wniosek: OUT!
Link: http://portal.acm.org/citation.cfm?id=1103379.1103383&coll=GUIDE&dl=GUIDE
Opis: Zawiera informacje o tuProlog lecz dość ogólnikowe i ubogie!
Wniosek: OUT!
Link: http://www.kprolog.com/jipl/index_e.html
Opis: Niestety z nieznajomych względów link nie działa. Podjęto prubę wejścia na stronę www.kprolog.com co się zakończyło sukcesem, lecz niestety oprócz tekstu „Prolog compiler” reszta tekstu na stronie jest w jakiś chinśkich, albo Japońskich ślaczkach :p. Próba znalezienia jakiegoś linku, który zmieniłby język zakończyła się powodzeniem. Strona angielska jest bardzo uboga, ale za to nie zawiera krzaczków! Jest to najprawdopodobniej tylko kompilator Prologu!
Wniosek: OUT!
TuProlog
Link: http://alice.unibo.it/xwiki/bin/view/Tuprolog/
Opis: Ciężko znaleść dobre materjały. Dokumentacja dość przeciętna (po szybkim przeglądnięciu). Wygląda na to, że prolog jest uruchamiany bezpośrednio z Javy, lub przez pisanie kodu dość podobnego do SWI Prolog, ale nie widać coś w stylu wykonania zapytania! Może jest to wykonywane w czasie rzeczywistym (równolegle z wykonaniem kodu Javy)!
Wniosek: OK! NEUTRAL!
MINERWA
Link: http://www.ifcomputer.co.jp/MINERVA/
Opis: Produkt komercyjny, dobrze udokumentowany oraz bardzo łatwo znaleść przykłady urzycia. Ponieważ jest to produkt płatny, nie będzie nas bardziej interesował. Można oczywiście na próbę ściągnąć MINERWĘ nie ponosząc kosztów, ale jedynie na potrzeby własne, w celu przetestowania produktu.
Wniosek: OUT!
Link: http://homepages.fh-regensburg.de/~mpool/mpool07/proceedings/8.pdf
Opis: Pdf opisujący integrację Prologu z Java 1.5. Dokument opiera się o tuProlog i zawiera przykłady kodu, co powinno ułatwić ewentualne zagłębianie się w tuProlog.
Wniosek: OK ( → tuProlog)!
Link: http://www.prolog.info/compilers.html
Opis: Strona opisująca kompilatory Prologu (nie które z nich mogą zawierać biblioteki integrujące Prolog z Javą).
Wniosek: OUT!
Link: http://kaminari.istc.kobe-u.ac.jp/logic/jprolog.html
Opis: Strona zestawia biblioteki integrujące Prolog z Javą!
Wniosek: INFO!
Zasada działania | Wspierane OS | Działa na następujących maszynach Prologu | Wersja Javy | |
---|---|---|---|---|
JIProlog | Umożliwia wywołanie predykatów z Prologu bez wymagania znajomości JNI, albo tworzenie własnych predykatów z poziomu Javy | Windows, Linux, Mac OS X | Większość popularnych (wspiera specyfikację Edimburgh'ską oraz większość specyfikacji ISO | od 1.1 |
InterProlog | Umożliwia wywołanie dowolnej komendy Prologu przez objekt PrologEngine | Windows, Linux, Mac OS X | XSB Prolog, SWI Prolog, YAP Prolog | od 1.4 |
JPL | Zbiór klas Javy i funkcji w C dostarczających interfejs pomiędzy Prologiem, a Javą, używa JNI (Java Nativ Interface) | Windows (tylko wersja JPL 2.0.2), Linux (tylko wersja JPL 1.0.1) | SWI Prolog | brak informacji |
TuProlog | Wymaga tylko obecności JVM oraz zainicjalizowania jednego pliku .jar, który zawiera najważniejsze mechanizmy maszyny Prologu | brak dokładnych informacji, prawdopodobnie Windows, ale skoro to wymaga tylko załadowania .jar to najprawdopodobniej pójdzie na wszystkich OS wspieranych przez Javę | Brak wymagań! | brak informacji |
W bibliotekach wymienionych w rozdziale 2 podjęto próbę zaimplementowania systemu eksperckiego Car ES .
Implementacja kodu została umieszczona tutaj.
Implementacja kodu została umieszczona tutaj.
Implementacja kodu została zamieszczona tutaj.
Implementacja kodu została zamieszczona tutaj.
Nie wymaga uruchomienia silnika prologu, gdyż JPL jest zintegrowany z SWI Prologiem. Aby wykonać zapytanie do Prologu wystarczy stworzyć obiekt Query i przekazać mu np. w konstruktorze zapytanie prologowe. Funkcjonalność jest bardzo zbliżona do tradycyjnego programowania w Prologu. Wystarczy stworzyć plik prologowy .pl i następnie przez obiekt Query wykonać zapytanie typu consult('nasz_plik.pl'). . W ten sposób łatwo stworzyć bazę wiedzy w Prologu. Kolejnym zapytaniem przy pomocy obiektu Query można spróbować uruchomić (jak to jest w naszym przypadku) system ekspercki, albo wykonać zapytanie prologowe w celu uzyskania wiedzy.
Obiekt Query jest zlinkowany z aktualnym zapytaniem do silnika prologu.
Sama biblioteka jest zestawem klas napisanych w języku C/C++ i Java.
Jest to biblioteka napisana czysto w języku Java. Można ją porównać do symulatora prologu. W celu „wirtualnego uruchomienia prologu” (jest to uruchumienie silnika tuProlog) tworzy się obiekt Prolog.
Aby móc najpierw korzystać z prologu trzeba zadeklarować obiekt prezentujący silnik obiektu oraz go zainicjalizować odpowiednim konstruktorem w zależności od używanego rodzaju prologu. Zapytanie prologowe można wykonać na różne sposoby. Najprostszym sposobem jest wywołanie metody deterministicGoal(„x”), gdzie jako 'x' podajemy polecenie prologowe. Nie można używać kropki przy podawaniu poleceń. Przez deterministicGoal() można również wywołać załadować program i uruchomić go. Aby jednak móc komunikować się z prologiem (czyli móc odpowiadać na pytania np. systemu eksperckiego) konieczne jest stworzenie obiektu, uruchomiającego okienko Javowe, będące konsolą prologu.
Ponieważ, JIProlog okazuje się być shareware, dlatego ograniczono się z komentowaniem i opisywaniem tej biblioteki.
JIProlog niestety w trakcie implementacji okazał się być częściowo shareware. Była to nie miła niespodzianka, gdyż nagle w trakcie implementacji przy wywołaniu jednej metody wyskoczyło okienko informujące, że ta biblioteka posiada pewne funkcje nie będące freeware. Z wymienionych tu względów biblioteka ta została najgorzej oceniona i odpadła z dalszej części jej analizowania. Na stronie obecnie jest informacja, że jest to shareware, ale w pełni dostępna. Niestety jest to fałszywa informacja, gdyż niektóre pakiety zostały przemianowane na nazwy typu „a”, „aa”, „aaa”, „ab”, „aab” itd. TuProlog jest dość ciekawym pomysłem, ale ze względu na fakt, że nie jest to w pełni rozwinięty symulator prologu, brakuje mu pewnych możliwości. Okazuje się, że zaimplementowanie systemu eksperckiego przerasta tą bibliotekę. Może jest to możliwe, ale w porównaniu z JPL, czy InterProlog, gdzie plik prologowy można od razu załadować tutaj stanowi to barierę nie do przejścia. Może projekt z biegiem czasu zostanie na tyle rozbudowany, że stanie się znaczną konkurencją dla JPL oraz InterPrologu, ale wówczas może się pojawić nurtujące pytanie o wydajność (w sensie szybkości przetwarzania) takiego symulatora prologu. Od wyżej wymienionych bibliotek znacznie odstaje JPL i InterProlog. Obie biblioteki umożliwiają załadowanie pliku prologowego „.pl”. Powoduje to dość znaczną redukcję kodu. Programy nie przekraczają praktycznie 10 linii kodu (dla przypadku implementacji systemu eksperckiego car.pl). Występują jednak różnice w realizacji celu obu bibliotek. Jeżeli chodzi o samą konfigurację systemu do pracy z oboma bibliotekami to InterProlog wydaje się być lepszy. Aby zainstalować JPL trzeba przeczytać uważnie instrukcję i dodać ewentualne pliki w odpowiednie miejsca w SWI Prologu. Brak właśnie dynamicznej biblioteki .dll, był przyczyną starty dużej ilości czasu. InterProlog w tej kwestii wymaga dodania tylko jednej zmiennej środowiskowej. Jeżeli chodzi o szybkość zapoznania się z daną biblioteką to SWI Prolog jest lepszy (subiektywna ocena autora). Bardzo szybko można uruchomić przykład dość prosty i intuicyjny pozwalający zrozumieć zasadę korzystania z JPL. InterProlog okazał się bardziej skomplikowany, a przykłady niestety nie uruchamiały się. W trakcie próby poznawania InterPrologu powstał kłopot z jego uruchomieniem. Okazało się, że InterProlog potrzebuje znać dokładną ściężkę do pliku uruchomieniowego prologu. Sama realizacja systemu eksperckiego okazała się również łatwiejsza w SWIPrologu, gdyż uruchamia on na konsoli w osobnym oknie system ekspercki car.pl i wpisywanie odpowiedzi jest dość łatwe i intyitywne. InterProlog zmusza do wywołania klasy, która uruchamia okienko javowe będące konsolą prologu (pod javą). Problematyczne dla późniejszego użytkownika jest korzystanie z tego okienka. Jest ono mało intuitywne. Odpowiedzi wpisuje się pod spodem w osobnym wydzielonym polu. Mimo licznych metod i klas związanych z obsługą GUI, okazało się nie możliwe stworzenie własnego interface'u, który by obsługiwał bezpośrednio uruchomiony program.
Obie biblioteki opierają się na silniku prologu i uruchamiają go przez odpowiednią metodę. Różnica między oboma bibliotekami jest znikoma jeżeli chodzi o proste programowanie w prologu. W momencie gdy chce się zaimplementować np. system ekspercki każda biblioteka obiera wówczas idzie inną drogą. InterProlog zmusza do korzystania z GUI, które jest nie jako stworzone na sztywno. Użytkownik (programista) nie ma możliwości definiowania ułożenia okienka, prezentowanych elementów itd. Stanowi to dość mocne ograniczenie. Jest to cena jaką płaci się za gotowe metody do obsługi GUI. JPL wykazuje się tutaj dużą swobodą. Uruchamia on prolog na konsoli i otrzymuje rezultat akcji. Możliwe jest tutaj zaprogramowanie własnego GUI, co wiąże się z większym nakładem czasu pracy, ale z drugiej strony stworzona aplikacja odpowiada w pełni naszym oczekiwaniom i możemy dowolnie ją modyfikować zgodnie z swoją implementacją.
Jeżeli chodzi o API to InterProlog jest o wiele bardziej rozbudowany. Jest to związane z faktem, że obsługuje on oprócz SWI Prologu jeszcze YAP Prolog i XSB Prolog. Dodatkowo dostarcza on cały pakiet związany z GUI, umożliwając bardzo szybką implementację aplikacji okienkowej (niestety forma okienek i ich budowa jest narzucona). JPL ma bardzo skromne API. Jest przejrzyste, proste i bardzo łatwo można się domyśleć co do czego służy. Nie dostarcza dość zaawansowanych metod jak InterProlog. Można powiedzieć, że JPL jest biblioteką bardziej skoncentrowaną na realizację celu samej integracji, starając się zachować jak największą prostotę.
Pakiety InterPrologu:
Pakiety JPL:
Obecnie wydaje się, że z porównanych bibliotek JIProlog, TuProlog, JPL oraz InterProlog tylko ostatnie dwie nadają się do intergracji Javy i Prologu. JPL jest biblioteką znacznie bardziej intuicyjną dla programistów Prologu (subiektywna ocena autora) natomiast InterProlog bardziej wymaga od użytkownika znajomość Javy. Samo uruchomienie systemu eksperckiego car.pl pozwala wyciągnąć wniosek, że InterProlog przez komunikację przez okienko Javowe jest bardziej bliższy językowi Java. JPL wydaje się jednak dawać większą swobodę w programowaniu i jest bardziej nastawiony na prostotę w implementacji. JPL posiada jednak pewne wady. Ogranicza on się przede wszystkim tylko do jednej wersji prologu - SWI Prolog. InterProlog oferuje obsługę trzech rodzajów prologu - SWI Prolog, XSB Prolog, YAP Prolog. Ciężko jest jednoznacznie określić, która biblioteka jest lepsza - jest to ocena zależna od użytkownika. Jeżeli ktoś poszukuje biblioteki mającej wiele możliwości (związanych przede wszystkim z GUI), która oferuje wiele rozwiązań oraz programista lubi język Java, to godny polecenia jest InterProlog. Jeżeli komuś zależy na prostocie i szybkości realizacji celu oraz na małej zależności od biblioteki to warto jednak skorzystać z JPL.
Ciekawe linki z wiki:
-standard: http://www.ugosweb.com/jiprolog/index.aspx http://portal.acm.org/citation.cfm?id=787039 http://www.sics.se/isl/sicstuswww/site/index.html http://www.declarativa.com/interprolog/ http://www.swi-prolog.org/packages/jpl/java_api/index.html
-JSP + Prolog: http://www.jaist.ac.jp/~fuji/work/docs/html4/jpro_p2.html
-Kolejne propozycje: http://kaminari.istc.kobe-u.ac.jp/PrologCafe/ http://ktiml.mff.cuni.cz/~bartak/prolog/implementations.html#prolog_in http://www.robert-tolksdorf.de/vmlanguages.html http://jlogic.sourceforge.net/
Własne znalezione linki:
http://portal.acm.org/citation.cfm?id=1103379.1103383&coll=GUIDE&dl=GUIDE http://kaminari.istc.kobe-u.ac.jp/PrologCafe/ http://www.cs.kuleuven.ac.be/~bmd/PrologInJava/ http://www.kprolog.com/jipl/index_e.html http://www.swi-prolog.org/packages/jpl/
-ciekawe linki (może być interesujące): http://alice.unibo.it/xwiki/bin/view/Tuprolog/ http://www.ifcomputer.co.jp/MINERVA/
-Coś o integracji Java 5.0 z Prolog: http://homepages.fh-regensburg.de/~mpool/mpool07/proceedings/8.pdf
-Liniki do prologu (strony zestawiające informacje): http://www.prolog.info/compilers.html http://kaminari.istc.kobe-u.ac.jp/logic/jprolog.html