Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:piw08_prolog_java [2008/06/04 13:47]
miw
pl:miw:piw08_prolog_java [2019/06/27 15:50] (aktualna)
Linia 38: Linia 38:
   * Należy stwożyć zmienną środowiskową SWI_HOME_DIR ze ścieżką do katalogu w którym jest zainstalowany SWIProlog.   * Należy stwożyć zmienną środowiskową SWI_HOME_DIR ze ścieżką do katalogu w którym jest zainstalowany SWIProlog.
   * Do zmiennej PATH należy dodać dodać ścieżkę do katalogu SWI_HOME_DIR\bin   * Do zmiennej PATH należy dodać dodać ścieżkę do katalogu SWI_HOME_DIR\bin
 +
  
  
Linia 58: Linia 59:
  
  
-  * Aby pojedynczo otrzymywać ​kolejno ​wyniki wywołujemy na zmiane dwie funkcje+  * Aby pojedynczo otrzymywać ​kolejne ​wyniki wywołujemy na zmiane dwie funkcje
  
  
Linia 69: Linia 70:
  
 JPL w wersji nie wymaga bezpośredniej inicjalizacji silnika prologa, przy pierwszym stworzonym obiekcie jpl.Query dokona się to samo. Inicjalizować prologa trzeba tylko wtedy gdy chcemy, używać określonego modułu w prologu. JPL w wersji nie wymaga bezpośredniej inicjalizacji silnika prologa, przy pierwszym stworzonym obiekcie jpl.Query dokona się to samo. Inicjalizować prologa trzeba tylko wtedy gdy chcemy, używać określonego modułu w prologu.
 +
  
  
Linia 81: Linia 83:
  
    ​nazwa_klasy Referencja new nazwa_klasy(parametry_funkcji_odzielone_przecinkami);​    ​nazwa_klasy Referencja new nazwa_klasy(parametry_funkcji_odzielone_przecinkami);​
-Jeśli chcemy stworzyć obiekt napisanej przez nas klasy pliki java muszą zostać umieszczone w odpowiednim katalogu względem pliku pl (nazwa package, do którego należy nasza klasa). Niestety nie da się korzystać z klas umieszczonych w plikach jar+Jeśli chcemy stworzyć obiekt napisanej przez nas klasy pliki class muszą zostać umieszczone w odpowiednim katalogu względem pliku pl (nazwa package, do którego należy nasza klasa). Niestety nie da się korzystać z klas umieszczonych w plikach jar
  
   * jpl_call( +Ref, +Method, +Params, -Result)   * jpl_call( +Ref, +Method, +Params, -Result)
Linia 101: Linia 103:
  
 ===== Interprolog ===== ===== Interprolog =====
 +
  
 ==== Java API ==== ==== Java API ====
Linia 133: Linia 136:
 </​code>​ </​code>​
  
-Daje możliwość pozwala ​na załadowanie logiki z dowolnego pliku prologowego do interpretera,​ można także wywołać:+Pozwala ​na załadowanie logiki z dowolnego pliku prologowego do interpretera,​ można także wywołać:
  
 <code java> <code java>
Linia 224: Linia 227:
  
 Pozwala odczytać zwrócony obiekt B jako integer A w Prologu. Pozwala odczytać zwrócony obiekt B jako integer A w Prologu.
 +
 +
  
 ====== Porównanie ====== ====== Porównanie ======
Linia 230: Linia 235:
  
   * Łatwość programowania - JPL jest zdecydowanie prostszy w obsłudze, nie wymaga inicjalizacji maszyny wnioskującej,​ metody Java są intuicyjne   * Ł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+  * Szybkość działania - testy wykazały, że nie ma różnicy ​wykorzystaniu obu systemów. Uśrednione wartości ​testów ​pokazały, że czas wykonania operacji (rozwiązanie Sudoku) jest bardzo podobny (różnice rzędu 0,01). Pomijając wartości skrajne (prawdopodobnie spowodowane pracą w tle innych aplikacji) pojedyncze wyniki prawie zawsze różniły się o stałą wartość (|time(Interprolog_execution)-time(JPL_execution)|=const).
   * 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   * 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 ​   * 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   * Łą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
 +
  
 ====== Przykłady programów ====== ====== Przykłady programów ======
 +
 +Programy testowane tylko w środowisku Windows
  
 ===== Interprolog ===== ===== Interprolog =====
 +
  
 ==== Sudoku ==== ==== Sudoku ====
-http://​student.agh.edu.pl/​~keepsake/​miw/​+ 
 +{{prolog_java_sudoku_interprolog.zip}}
  
 Wywołanie: java -jar Sudoku.jar [prolog compiler] Wywołanie: java -jar Sudoku.jar [prolog compiler]
Linia 251: Linia 261:
  
 jar cfm Sudoku.jar manifest *.class jar cfm Sudoku.jar manifest *.class
 +
 +
 +
  
  
Linia 257: Linia 270:
 ==== Car ==== ==== Car ====
  
-http://​student.agh.edu.pl/​~keepsake/​miw/​Car.java+{{prolog_java_car_interprolog.zip}}
  
-{{car.pl}}+Kompilacja j.w
  
-Kompilacja ​j.w. (należy wyedytować manifest - zmienić Sudoku na Car)+Uruchomienie ​j.w. 
  
-Uruchomienie j.w. (w pliku Car.java wpisana jest ścieżka do interpretera Prologu, należy ją wyedytować przed kompilacją) 
  
-http://​student.agh.edu.pl/​~keepsake/​miw/​Car.rar - project Eclipse 
  
  
 ===== JPL ===== ===== JPL =====
 SUDOKU SUDOKU
-http://​student.agh.edu.pl/​~colesiu/​jpl/​Sudoku.rar ​+{{prolog_java_sudoku_jpl.zip}} 
  
 Przykład działania wywołania prologa w javie (GUI w javie i wnioskowanie w prologu). Przykład działania wywołania prologa w javie (GUI w javie i wnioskowanie w prologu).
Linia 276: Linia 287:
  
 CAR.PL CAR.PL
-http://​student.agh.edu.pl/​~colesiu/​jpl/​Test.rar+{{prolog_java_car_jpl.zip}}
  
 Przykład działania wywołania javy w prologu (Okno startowe w javie wywołuje prologa, a prolog wywołuje kolejne dialogBoxy z pytaniami). Przykład działania wywołania javy w prologu (Okno startowe w javie wywołuje prologa, a prolog wywołuje kolejne dialogBoxy z pytaniami).
Linia 283: Linia 294:
 ====== Problemy ====== ====== Problemy ======
  
 +Do poprawy, ​ --- //​[[wojnicki@agh.edu.pl|Igor Wojnicki]] 2008/06/11 13:10//:
 +
 +  - https://​ai.ia.agh.edu.pl/​wiki/​pl:​miw:​piw08_prolog_java#​jpl cos nie tak z wersjami
 +  - https://​ai.ia.agh.edu.pl/​wiki/​pl:​miw:​piw08_prolog_java#​inne prosze podac linki
 +  - literowki
 +  - cos nie tak: "Daje możliwość pozwala na załadowanie logiki..."​
 +  - co z porownaniem Szybkosci Dzialania, https://​ai.ia.agh.edu.pl/​wiki/​pl:​miw:​piw08_prolog_java#​porownanie
  
  
pl/miw/piw08_prolog_java.1212580065.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0