Różnice
Różnice między wybraną wersją a wersją aktualną.
|
|
— |
pl:miw:miw08_ruleruntimeo:jpljava [2019/06/27 15:50] (aktualna) |
| ====== Przykład użycia JPL do komunikacji Prolog'a z Java ====== |
| |
| Poniżej przestawiam prosty przykład mocno inspirowany tutorialem do JPL. Probując wywołać predykat Prologa z kodu Javy posługujemy się następującą składnią : |
| <code java> |
| Query q2 = |
| new Query( |
| "child_of", |
| new Term[] {new Atom("joe"),new Atom("ralf")} |
| ); |
| |
| System.out.println( |
| "child_of(joe,ralf) is " + |
| ( q2.query() ? "provable" : "not provable" ) |
| ); |
| </code> |
| Przykład pokazuje przesłanie zapytania do bazy wiedzy prologa. Można ten mechanizm wykorzystać do wywoływania predykatów wewnątrz obiektów LogTalk, czyli de facto do wywoływania metod na obiektach LogTalk z obiektów Java'y. |
| |
| Gdy konieczne jest wysłanie komunikatu do obiektu Java'y z poziomu Prologa, JPL oferuje następujące rozwiązanie : |
| |
| Predykat **jpl_new/3** pozwala na utworzenie instancji obiektu klasy z Javy : |
| <code prolog> |
| jpl_new( 'javax.swing.JFrame', ['frame with dialog'], F) |
| </code> |
| Natomiast predykat **jpl_call/4** pozwala wywołać metodę na utworzonym powyżej obiekcie: |
| <code prolog> |
| jpl_call( F, setVisible, [@(true)], _) |
| </code> |
| |
| Jak widać JPL umożliwia obustronne wywoływanie metod pomiędzy obiektami klas zdefiniowanych w Javie i logiką opisaną w Prologu. |