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)

  • 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: Car ES, opposite: ready MV i Java, build M in Prolog, make it work with the V

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).  
Predykat pokazujący informacje:
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:
  • Predykat question2/2 pokazuje okno z pytaniem oraz przyciskami YES i NO
    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.
  • Predykat myQuestion/3 pokazuje okno z przyciskami do wyboru( tylko jeden można zaznaczyć)
  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.
  • Predykat info/1 wyświetla okno z informacją
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/2 wyświetla okno sterowania, przyciski sterujące wczytywane są dynamicznie w konstruktorze
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/1 otwiera okno wyboru pliku z rozszerzeniem pl do załadowania
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

Wymagania

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

pl/miw/miw08_ruleruntimeg.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0