|
|
pl:miw:miw08_ruleruntimeo:swiconfig [2019/06/27 15:50] |
pl:miw:miw08_ruleruntimeo:swiconfig [2019/06/27 15:50] (aktualna) |
| ===== Konfiguracja SWI-Prolog do LogTalk'a ===== |
| |
| Aby utworzyć, skompilować i załądować do pamieci obiekty LogTalk'a konieczne jest wcześniejsze skonfigurowanie używanego kompilatora Prolog'a. Na potrzeby tego projektu zakładam, że jest nim [[http://www.swi-prolog.org|SWI-Prolog]], jakkolwiek jeśli wierzyć dokumentacji LogTalk'a to jest on w pełni kompatybilny z większościa innych kompilatorów Prolog'a. |
| Aby zintegrować LogTalk'a z SWI: |
| należy wykonać predykat consult na trzech plikach, które można znaleźć w katalogu instalacyjnym LogTalk'a : |
| * configs/swi.config - ustawia zmienne i konfiguruj srodowisko Prologa |
| * complier/logtalk.pl - laduje kompilator LogTalka |
| * libpaths/libpaths.pl - ustawia sciezki do bibliotek standardowych LogTalka |
| |
| chyba najwygodniej jest sporządzić sobie plik startowy: |
| <code prolog> |
| :-consult('lib/Resources/logtalk/swi.config'). |
| :-consult('lib/Resources/logtalk/logtalk.pl'). |
| :-consult('lib/Resources/logtalk/libpaths.pl'). |
| |
| </code> |
| który pożniej uruchamiamy z Javy przed tworzeniem obiektów LogTalk, w następujący sposób: |
| |
| |
| <code java> |
| |
| JPL.setDefaultInitArgs( |
| new String[] { |
| "pl", |
| "-f", "none", |
| "-g", "set_prolog_flag(debug_on_error,false)", |
| "-q", |
| "-nosignals" |
| } |
| ); |
| |
| Query q = new Query("['lib/logtalkLoad.pl']."); |
| |
| if (!q.hasSolution()) |
| { |
| RuntimeException e = new RuntimeException("error loading logtalk"); |
| } |
| else |
| { |
| System.out.println("Hurray!"); |
| } |
| |
| </code> |
| |
| Po udanym wykonaniu powyższego kodu jesteśmy już w stanie tworzyć obiekty LogTalk z kodu Javy i wywoływać ich metody : |
| |
| <code java> |
| //utworznie instancji obiektu logTalkControler |
| Query loadControler = new Query("logtalk_load", |
| new Term[]{ |
| new Atom("logTalkControler") |
| } |
| ); |
| //wywolanie metody testValue obiektu logTalkControler |
| Query askLgt = new Query("logTalkControler::testValue(valueToTest)."); |
| System.out.println("Is 'a' a proper TestValue?:" |
| + (askLgt("testValue", "a")?"YES":"NO!")); |
| </code> |
| |
| Pełną treść tego przykładu zamieszczam tutaj [[pl:miw:miw08_ruleruntimeo:logtalkjava]]. |