Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:piw08_prolog_java [2008/05/12 15:16] miw |
pl:miw:piw08_prolog_java [2008/06/19 18:06] miw |
====== Opis ====== | |
| |
Wojciech Leś, Michał Łosiewicz, (IS) keepsake@o2.pl, colesiu@student.agh.edu.pl | |
| |
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? | |
- najlepiej działa na XSB Prolog, na SWI wg dokumentacji powinno działać, jednak wszystkie przykłady są na XSB, a konwersja wymaga dość dobrej znajomości Interprologa | |
| |
http://www.swi-prolog.org/packages/jpl/java_api/index.html , do sprawdzenia | |
| |
| |
| |
====== Java + Prolog rozwiązania ====== | |
| |
Interprolog - stworzony dla XSB Prolog. Posiada interfejsy dla SWI i YAP. Istnieje zarówno Java, jak i Prolog API. Brakuje niestety niedeterministycznych celów w Javie, da się to zrobić tylko przez sztuczne stworzenie listy wszystkich rozwiązań w Prologu. Dokumentacja zawiera podstawowy opis metod i kilka banalnych przykładów. Bardziej rozbudowane przykłady stworzone są z użyciem XSB. Komunikacja odbywa się na zasadzie TCP/IP sockets. | |
| |
JPL - stworzony dla SWI Prolog. Rozprowadzany z tą dystrybucją. Najnowsza wersja - 3.0. Współpracuje praktycznie tylko z SWI. Dokumentacja istnieje do wersji do 2.0, ale poprzez forum można bezpośrednio skontaktować się z autorami projektu. API istnieje dla Javy jak i dla Prologa. Wysokopoziomowe API jest proste w użyciu. | |
| |
Istnieją także interpretery Prologu (właściwie języka Prologo-podobnego) w Javie, jest to dość duża grupa projektów, ale rozwiązania te są dość ubogie i mniej efektywne. | |
| |
| |
====== Porównanie ====== | |
| |
JPL - Interprolog | |
| |
* Łatwość programowania - JPL jest zdecydowanie prostszy w obsłudze, nie wymaga inicjalizacji maszyny wnioskującej, metody Java są intuicyjne | |
* Szybkość działania - w fazie testów | |
* Wygoda - Interprolog nie posiada non-deterministic goal api, stąd wszelkie multiple-solutions trzeba generować w prologu i zwracać jako listę rozwiązań, która jest obiektem typu String w Javie i trzeba ją parsować, natomiast JPL generuje kolejne rozwiązania z poziomu Java poprzez kolejne wywołania tych samych 2 funkcji | |
* Dostęp do konsoli interpretera Prologu - JPL musi mieć zdefiniowaną zmienną środowiskową (SWI_HOME_DIR), w której jest adres katalogu domowego SWI, w Interprologu w kodzie programu Java należy wywołać SWISubProcessEngine z parametrem jakim jest śćieżka dostępu do interpretera | |
* Łączność Prolog-Java - w JPL realizuje się to za pomocą 4 predykatów (tworzenie obiektów Java, wywoływanie funkcji, powiązanie obiektu Java ze zmienną w Prologu, ustalenie wartości zmiennej), w Interprologu działa to na zasadzie komunikacji synchronicznej przez Java Message | |
| |
====== Sudoku - przykład wywołania Prologu z poziomu Java ====== | |
| |
===== Interprolog ===== | |
| |
http://student.agh.edu.pl/~keepsake/miw/ | |
| |
Wywołanie: java -jar Sudoku.jar [prolog compiler] | |
| |
np. java -jar Sudoku.jar plcon | |
| |
Kompilacja: | |
| |
javac -classpath interprolog.jar Sudoku.java | |
| |
jar cfm Sudoku.jar manifest *.class | |
| |
| |
===== JPL ===== | |
| |
http://student.agh.edu.pl/~colesiu/sudoku.rar | |
| |
należy ustawić zmienną środowiskową SWI_HOME_DIR, do zmiennej środowiskowej PATH należy dodać SWI_HOME_DIR/bin | |
| |
====== Problemy ====== | |
| |
| |
| |