Projekt zakończony
Filip Haftek filiphaftek@o2.pl
Investigate runtime integration aspects, mainly semi-automatical building of a GUI for Prolog programs possibilities XPCE, Static QT/Gtk, Gtk-Server, Java (Swing), Eclipse (SWT)
XPCE, QT, GTK, GtkServer, Java etc., SWI Prolog documentation
Feasibility study, a prototype.
SWING LogTalk
question(Result,T):- jpl_call('javax.swing.JOptionPane','showConfirmDialog',[(@null),T,'Question',0],X), change(X,Result).
info(X):- jpl_call('javax.swing.JOptionPane','showMessageDialog',[(@null),X],F).
Przed:
get_yes_or_no(Result) :- get(Char), get0(_), interpret(Char,Result), !.
Po:
get_yes_or_no(Q,Result) :- ask_question(Q,X), question(Result,X).
Przed:
ask_question(fuel_is_ok) :- write('Look in the carburetor. Can you see or smell gasoline?'),nl.
Po zmianach stał się termem:
ask_question(fuel_is_ok,'Look in the carburetor. Can you see or smell gasoline?').
Przed:
user_says(Q,A) :- \+ stored_answer(Q,_), nl,nl, ask_question(Q), get_yes_or_no(Response), asserta(stored_answer(Q,Response)), Response = A.
Po:
user_says(Q,A) :- \+ stored_answer(Q,_), get_yes_or_no(Q,Response), asserta(stored_answer(Q,Response)), Response = A.
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.
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.
info(X):- jpl_datums_to_array(X,Q), jpl_new('miw2.Info',[Q],D)
Zmienione pliki:
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)).
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.
readF(File):- jpl_new('miw2.PlFileChooser',[],F), jpl_call(F,getFile,[],File).
Zmienione pliki:
Celem projektu było swtorzenie aplikacji MV, w której modelem jest program napisany w języku prolog, natomiast interfejs został stworzony w Javie.
W projekcie zastosowano 6 klas Javy odpowiedzialnych za wyświetlanie odpowiednich okien w trakcie działania programu. Szczegółowy opis klas znajduje się poniżej, natomiast cały projekt Javy wraz z dokumentacją znajduje się w części Materiały. Dodatkowo stworzono 6 predykatów, których opis znajduje się w części Projekt. Aby uruchomić program należy wpisać odpowiednią komendę w prologu ( main. lub xshell. w zależności od programu), następnie pojawi się okienko Javy z informacją. Dalsza obsługa aplikacji polega na klikaniu odpowiednich przycisków zgodnie z pojawiającymi się instrukcjami. Klasy Javy zostały napisane w możliwie uniwersalny sposób tzn:
UWAGA: W programie OOPS po załadowaniu pliku z danymi i wybraniu odpowiednich danych startowych, aby dokonać ponownego załadowania danych wejściowych należy zamknąć program i uruchomić ponownie.
1. Klasy Javy wykorzystywane z poziomu języka Prolog:
2. Predykaty wykorzystyjuące klasy Javy:
Dokładny opis predykatów znajduje się w części Projekt.
Spakowany projekt Javy - miw2.zip
Do projektu CAR: car.pl
Do projektu OOPS: oops.pl animal_kb.pl
Do projektu XSHELL: xshell.pl cichlid.pl readstr.pl readnum.pl writeln.pl