Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_ruleruntimeg [2008/05/20 10:48] miw |
pl:miw:miw08_ruleruntimeg [2008/07/05 11:08] gjn |
====== Opis ====== | |
Filip Haftek <filiphaftek@o2.pl> | |
| |
Investigate runtime integration aspects, mainly | |
semi-automatical building of a GUI for Prolog programs possibilities | |
XPCE, Static QT/Gtk, [[http://www.gtk-server.org|Gtk-Server]], Java (Swing), Eclipse (SWT) | |
* input | |
XPCE, QT, GTK, GtkServer, Java etc., SWI Prolog documentation | |
* output | |
Feasibility study, a prototype. | |
* integration options for Java: JPL (SWI),Logtalk (OO Prolog), architecture: MVC | |
* approach: 2 -3 app. cases, M prolog, V inv Java, C-> JPL/Logtalk, e.g. ready M in Prolog, build V in Java: [[pl:prolog:prolog_lab:prolog_lab_2#cwiczenieprosty_system_ekspertowy|Car ES]], opposite: ready MV i Java, build M in Prolog, make it work with the V | |
| |
__SWING__ __LogTalk__ | |
| |
| |
====== Spotkania ====== | |
| |
===== 080304 ===== | |
===== 080318 ===== | |
* car.pl skoncz | |
| |
===== 080401 ===== | |
* upload car.pl do wiki | |
* do przeanalizowani: [[pl:prolog:prolog_lab:prolog_lab_6#tematprzyklady_systemow_regulowych|inne systemy]] | |
| |
| |
| |
| |
| |
| |
===== 080422 ===== | |
* xshell oops | |
| |
| |
===== 080520 ===== | |
* zarys sprawozd, opis alternatywnych realizacji, pliki java w wiki we wlasnym namespace | |
| |
| |
| |
============ Projekt ====== | |
| |
============ 1. PROSTY SYSTEM EKSPERCKI ====== | |
==Predykat tworzący okno z pytaniem:== | |
<code prolog> | |
question(Result,T):- | |
jpl_call('javax.swing.JOptionPane','showConfirmDialog',[(@null),T,'Question',0],X), | |
change(X,Result). | |
</code> | |
==Predykat pokazujący informacje:== | |
<code prolog> | |
info(X):- | |
jpl_call('javax.swing.JOptionPane','showMessageDialog',[(@null),X],F). | |
</code> | |
| |
==Predykat get_yes_or_no:== | |
Przed: | |
<code prolog> | |
get_yes_or_no(Result) :- get(Char), | |
get0(_), | |
interpret(Char,Result), | |
!. | |
</code> | |
Po: | |
<code prolog> | |
get_yes_or_no(Q,Result) :- | |
ask_question(Q,X), | |
question(Result,X). | |
</code> | |
==Predykat ask_question:== | |
Przed: | |
<code prolog> | |
ask_question(fuel_is_ok) :- | |
write('Look in the carburetor. Can you see or smell gasoline?'),nl. | |
</code> | |
Po zmianach stał się termem: | |
<code prolog> | |
ask_question(fuel_is_ok,'Look in the carburetor. Can you see or smell gasoline?'). | |
</code> | |
==Predykat user_says:== | |
Przed: | |
<code prolog> | |
user_says(Q,A) :- \+ stored_answer(Q,_), | |
nl,nl, | |
ask_question(Q), | |
get_yes_or_no(Response), | |
asserta(stored_answer(Q,Response)), | |
Response = A. | |
</code> | |
Po: | |
<code prolog> | |
user_says(Q,A) :- \+ stored_answer(Q,_), | |
get_yes_or_no(Q,Response), | |
asserta(stored_answer(Q,Response)), | |
Response = A. | |
</code> | |
[[pl:miw:miw08_ruleruntimeg:car|Plik car.pl]] | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
============ 2. ZAAWANSOWANE SYSTEMY EKSPERCKIE ====== | |
== 2.1 XSHELL System do rozpoznowania ryb:== | |
* Predykat question2/2 pokazuje okno z pytaniem oraz przyciskami YES i NO | |
<code prolog> | |
question2(Result,Question):- | |
jpl_datums_to_array(Question,Q), | |
jpl_new('miw2.YNQuestion',[Q],D), | |
jpl_call(D,setVisible,[@(true)],_), | |
jpl_call('miw2.YNQuestion',getValue,[],V), | |
Result = V. | |
</code> | |
* Predykat myQuestion/3 pokazuje okno z przyciskami do wyboru( tylko jeden można zaznaczyć) | |
<code prolog> | |
myQuestion(Question,Choices,Response):- | |
jpl_datums_to_array(Choices,L), | |
jpl_datums_to_array(Question,Q), | |
jpl_new('miw2.MyRBForm',[L,Q],F), | |
jpl_call(F,setVisible,[@(true)],_), | |
jpl_call('miw2.MyRBForm',getValue,[],V), | |
Response = V. | |
</code> | |
* Predykat info/1 wyświetla okno z informacją | |
<code prolog> | |
info(X):- | |
jpl_datums_to_array(X,Q), | |
jpl_new('miw2.Info',[Q],D) | |
</code> | |
Zmienione pliki: | |
* [[pl:miw:miw08_ruleruntimeg:oops|oops.pl]] | |
* [[pl:miw:miw08_ruleruntimeg:animal_kb|animal_kb.pl]] | |
| |
== 2.2 OOPS System do produkcji zabawek :== | |
| |
* Predykat initial/0 wyświetla okno z wszystkimi możliwymi danymi wejściowymi z możliwością zaznaczenia dowolnej ilości danych | |
<code prolog> | |
initial:- | |
jpl_datums_to_array([dane_wejsciowe],L), | |
jpl_new('miw2.MyCBForm',[L,'Choose facts:'],D), | |
jpl_call(D,getChecked,[],_), | |
jpl_get('miw2.MyCBForm',termos,{C}), | |
assert(initial_data(C)). | |
</code> | |
* control/2 wyświetla okno sterowania, przyciski sterujące wczytywane są dynamicznie w konstruktorze | |
<code prolog> | |
control(X,Buttons):- | |
repeat, | |
jpl_datums_to_array(Buttons,B), | |
jpl_new('miw2.ControlForm',[X,B],F), | |
jpl_call(F,getValue,[],V), | |
change(V,Z), | |
doit(Z), | |
Z = exit. | |
</code> | |
* readF/1 otwiera okno wyboru pliku z rozszerzeniem pl do załadowania | |
<code prolog> | |
readF(File):- | |
jpl_new('miw2.PlFileChooser',[],F), | |
jpl_call(F,getFile,[],File). | |
</code> | |
Zmienione pliki: | |
* [[pl:miw:miw08_ruleruntimeg:xshell|xshell.pl]] | |
* [[pl:miw:miw08_ruleruntimeg:cichild|cichild.pl]] | |
| |
| |
====== Sprawozdanie ====== | |
1. Klasy Javy wykorzystywane z poziomu języka Prolog: | |
* Info - odpowiada za wyświetlanie okna z informacją | |
* MyRBForm - okno z RadioButtonami | |
* MyCBForm - okno z CheckBoxami | |
* YNQuestion - okno z pytaniem oraz przyciskami YES i NO | |
* ControlForm - okno z przyciskami do sterowania aplikacją | |
* PlFileChooser - okno z wyborem pliku prologu | |
| |
2. Predykaty wykorzystyjuące klasy Javy: | |
* myQuestion(Question,Choices,Response) | |
* question2(Result,Question) | |
* info(X) | |
| |
| |
| |
====== Materiały ====== | |
Pytania: | |
- nazwa zwierzaka w MyCBForm | |
- rozmiar Frame - 2 opcje | |