Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:piw:2010:systemy_ekspertowe:hekate_iii [2011/04/05 16:17] kkr |
pl:dydaktyka:piw:2010:systemy_ekspertowe:hekate_iii [2019/06/27 15:50] (aktualna) |
* Java | * Java |
=== Prolog === | === Prolog === |
Callbacks are an ordinary Prolog predicates. | Prolog-based callbacks are an ordinary Prolog predicates. |
<code> | <code> |
xcall ask_console : [AttName] >>> (write('Type value for attribute: '), | xcall ask_console : [AttName] >>> (write('Type value for attribute: '), |
| |
=== XPCE === | === XPCE === |
Są to predykaty w języku Prolog wzbogacone o funkcje XPCE. Aby zapewnić jednak oprawne działanie interpretera HeaRT nalezy korzystać z tego szkieletu: | The XPCE-based callbacks consist of the ordinary Prolog predicates that are enriched by XPCE functions. |
The XPCE callbacks consist of the ordinary Prolog predicates that are enriched by XPCE functions. | |
In order to assure the correct integration with HaeRT, the following schema must be used: | In order to assure the correct integration with HaeRT, the following schema must be used: |
<code> | <code> |
</code> | </code> |
| |
**Ćwiczenie** | **Exercise** \\ |
Uruchom wnioskowanie dla przykładu z bankomatem i prześledź działanie callbacków: | Run the inference mechanism for the ATM example and trace the callback mechanism: |
* {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:cashpoint-clb-xpce.pl|}} | * {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:cashpoint-clb-xpce.pl|}} |
| |
=== Java === | === Java === |
Są to programy napisane w języku Java uruchamiane przez prolog przy użyciu JPL. Aby wykorzystać ten mechanizm należy korzystać ze specjalnie przygotowanych do tego klasy: | The Java-based callbacks are the Java programs that are executed by prolog with the help of JPL. |
* DataFetcher.java - klasa abstrakcyjna którą muszą rozszerzać wszystkie callbacki | To exploit this mechanism, the following classes mysu be used: |
* RequestInterface.java - Kontroler | * DataFetcher.java - an abstract class that must be inherited by all the callbacks |
* Response.java - klasa przechowująca dane odebrane od użytkownika. | * RequestInterface.java - controller |
| * Response.java - class that stores a data retrieved from a user. |
| |
W celu ulatwienia implementacji niektórych callbacków, przygotowano zbiór podstawowych komponentów do pobierania danych od użytkownika: | The set of basic components, which can be used to the retrieval data from a user, is prepared to facilitate the callbacks implementation. |
* ComboBoxFetcher.java - przyjmuje listę wartości z jakich można wybierać. Zwraca jedną wybraną wartość | * **ComboBoxFetcher.java** - creates a list of selectable values. It returns one (selected) value. |
* SliderFetcher.java - przyjmuje przedział wartości numerycznych między którymi można wybierać. Zwraca jedna wybraną wartość. | * **SliderFetcher.java** - allowf for selecting a value from a given range of values. It returns one (selected) value. |
* TwoListsFetcher.java - przyjmuje listę wartości jakich można wybierać i zwraca również listę wybranych wartości. | * **TwoListsFetcher.java** - creates a list of selectable values. It returns list of all selected values. |
* ComboGUI.java - GUI dla ComboBoxFetcher | * **ComboGUI.java** - GUI for ComboBoxFetcher |
* SliderGUI.java - GUI dla SliderFetcher | * **SliderGUI.java** - GUI for SliderFetcher |
* TwoListsGUI.java - GUI dla TwoListsFetcher | * **TwoListsGUI.java** - GUI for TwoListsFetcher |
| Download a source code {{:hekate:callbackslibrary.zip|here}}. |
Kod źródłowy klas do pobrania {{:hekate:callbackslibrary.zip|tutaj}}. | |
| |
==Przykład== | == Example == |
Aby wykorzystać któryś z komponentów Java do napisania callbacku, należy wykonać następujące kroki: | In order to use some of the above components to create callback, you must go through the following steps: |
- Skompilować kod źródłowy <code>javac callbacks/input/*.java skeleton/*.java</code> i umieścić go w katalogu z plikiem HMR | - Compile the source code <code>javac callbacks/input/*.java skeleton/*.java</code> and move it to the HMR file directory. |
- Odpowiednio zmodyfikować plik HMR dopisując atrybutom pole //callback// i uzupełniając go nazwą i listą parametrów jakie callback przyjmuje, np. <code>callback: [ask_symbolic_GUI,[day]]</code> | - Modify the HMR file by adding the //callback// filed to the appropriate attributes. |
- Dopisać predykaty //xcall// do pliku HMR, definiujące wywołanie callbacka, np.:<code> | - Define the value of this filed by entering the name of the callback as well as a list of parameters i.e. <code>callback: [ask_symbolic_GUI,[day]]</code> |
| - Add the //xcall// predicates to the HMR file, which execute a given callback:<code> |
xcall ask_symbolic_GUI : [AttName] >>> ( | xcall ask_symbolic_GUI : [AttName] >>> ( |
%Tworzymy obiekt kontrolera: | % Creating controller |
jpl_new('skeleton.RequestInterface',[],T), | jpl_new('skeleton.RequestInterface',[],T), |
%Przygotowujemy listę parametrów | % Creating a list of params |
alsv_domain(AttName,Domain,symbolic), | alsv_domain(AttName,Domain,symbolic), |
Params = [AttName|Domain], | Params = [AttName|Domain], |
term_to_atom(Params, AtomParams), | term_to_atom(Params, AtomParams), |
%Wywołujemy callback i podajemu my listę parametrów znajdującą sie | % Execute the callback with the params contained by AtomPArams term. |
%w termie AtomPArams. Wartosc zwrócona przez callback znajdzie się | % The result will be stored in Answer term. |
%w termie Answer. | |
jpl_call(T,request,['callbacks.input.ComboBoxFetcher',AtomParams],Answer), | jpl_call(T,request,['callbacks.input.ComboBoxFetcher',AtomParams],Answer), |
%Zamieniamy zwróconą wartość na term i dodajemy go do bazy faktów | % Map the returned value into term and add it the the factbase |
atom_to_term(Answer,Answer2,_), | atom_to_term(Answer,Answer2,_), |
alsv_new_val(AttName,Answer2)). | alsv_new_val(AttName,Answer2)). |
</code> | </code> |
- Uruchomić HeaRT w katalogu z plikiem HMR, skompilować ten plik i uruchomić wnioskowanie. Callbacki powinny zostać uruchomione. | - Go to HMR file directory. |
| - Run HeaRT tool. |
| - Compile HMR file. |
| - Run the inference mechanism. |
| - The callback should be executed. |
| |
**Ćwiczenie** | **Exercise 1** \\ |
Pobierz poniższy kod {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:kardio.zip|}}. I dla pliku HMR znajdującego się w archiwum uruchom wnioskowanie. | Download the file {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:kardio.zip|}} and run the inference for the HMR file. |
| |
=== Ćwiczenie === | **Exercise 2** \\ |
- Uruchom interpreter HeaRT, wczytaj {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:cashpoint-clb-xpce.pl|plik}} HMR i uruchom wnioskowanie predykatem (//gox/3//). Dopisz callback wyświetlający wynik wnioskowania w XPCE. | - Run HeaRT and load HMR {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:cashpoint-clb-xpce.pl|file}}. |
- Pobierz ten {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:thermostat-clb-pl.pl|plik}} HMR i dopisz (zmodyfikuj istniejące wersje prologowe) do niego callbacki w Javie bazując na przykładzie z poprzedniej sekcji. | - Then run the infenrence mechnism using predicate (//gox/3//). |
| - Add a new XPCE-based callback, which would present the results of the inference. |
| - Download HMR {{:pl:dydaktyka:piw:2010:systemy_ekspertowe:thermostat-clb-pl.pl|file}}. |
| - Add (modify an existing Prolog-based) a new JAVA-based callbacks in the same way as in the previous section. |
| |
| |