Opis
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
Spotkania
Projekt
1. PROSTY SYSTEM EKSPERCKI
Predykat tworzący okno z pytaniem:
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).
Predykat get_yes_or_no:
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).
Predykat ask_question:
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?').
Predykat user_says:
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.
Plik car.pl
2. ZAAWANSOWANE SYSTEMY EKSPERCKIE
2.1 XSHELL System do rozpoznowania ryb:
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:
2.2 OOPS System do produkcji zabawek :
Problem: Po załadowaniu danych wejsciowych, przy próbie ponownego załadowania danych program wczytuje do bazy prologu dane z pierwszego wczytania, trzeba zamknąć aplikacje i uruchomić ponownie.
Predykat initial/0 wyświetla okno z wszystkimi możliwymi danymi wejściowymi z możliwością zaznaczenia dowolnej ilości danych
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:
Sprawozdanie
1.Cel projektu :
Celem projektu było swtorzenie aplikacji MV, w której modelem jest program napisany w języku prolog, natomiast interfejs został stworzony w Javie.
2. Wykonanie :
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:
klasa Info posiada 3 różne konstruktory w celu ułatwienia obsługi jej z poziomu prologu ( String[], Compound[] lub String)
klasa ControlForm jako argument pobiera Insrtukcję oraz listę przycisków, po wciśnięciu przycisku zwracana jest jego wartośc tj. 1 dla pierwszego, 2 dla kolejnego itp., co wymaga jedynie zastosowania z poziomu języka prolog zamiany wartości liczbowej na dowolną wartość.
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.
3. Zastosowane klasy i predykaty :
1. Klasy Javy wykorzystywane z poziomu języka Prolog:
2. Predykaty wykorzystyjuące klasy Javy:
myQuestion(Question,Choices,Response)
question2(Result,Question)
info(X)
initial
readF(File)
control(X,Buttons)
Dokładny opis predykatów znajduje się w części Projekt.
Materiały