Damian Janicki janicki.damian@gmail.com
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.
integration options for Java: JPL (SWI),Logtalk (OO Prolog), architecture: MVC
approach: 2 -3 app. cases, M prolog, V in 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
Oryginalny system (tematprosty_system_ekspertowy)
% From the book
% PROLOG PROGRAMMING IN DEPTH
% by Michael A. Covington, Donald Nute, and Andre Vellino
% (Prentice Hall, 1997).
% Copyright 1997 Prentice-Hall, Inc.
% For educational use only
% File CAR.PL
% Simple automotive expert system
:- consult('getyesno.pl'). % Use ensure_loaded if available.
%
% Main control procedures
%
start :-
write('This program diagnoses why a car won''t start.'),nl,
write('Answer all questions with Y for yes or N for no.'),nl,
clear_stored_answers,
try_all_possibilities.
try_all_possibilities :- % Backtrack through all possibilities...
defect_may_be(D),
explain(D),
fail.
try_all_possibilities. % ...then succeed with no further action.
%
% Diagnostic knowledge base
% (conditions under which to give each diagnosis)
%
defect_may_be(drained_battery) :-
user_says(starter_was_ok,yes),
user_says(starter_is_ok,no).
defect_may_be(wrong_gear) :-
user_says(starter_was_ok,no).
defect_may_be(starting_system) :-
user_says(starter_was_ok,no).
defect_may_be(fuel_system) :-
user_says(starter_was_ok,yes),
user_says(fuel_is_ok,no).
defect_may_be(ignition_system) :-
user_says(starter_was_ok,yes),
user_says(fuel_is_ok,yes).
%
% Case knowledge base
% (information supplied by the user during the consultation)
%
:- dynamic(stored_answer/2).
% (Clauses get added as user answers questions.)
%
% Procedure to get rid of the stored answers
% without abolishing the dynamic declaration
%
clear_stored_answers :- retract(stored_answer(_,_)),fail.
clear_stored_answers.
%
% Procedure to retrieve the user's answer to each question when needed,
% or ask the question if it has not already been asked
%
user_says(Q,A) :- stored_answer(Q,A).
user_says(Q,A) :- \+ stored_answer(Q,_),
nl,nl,
ask_question(Q),
get_yes_or_no(Response),
asserta(stored_answer(Q,Response)),
Response = A.
%
% Texts of the questions
%
ask_question(starter_was_ok) :-
write('When you first started trying to start the car,'),nl,
write('did the starter crank the engine normally? '),nl.
ask_question(starter_is_ok) :-
write('Does the starter crank the engine normally now? '),nl.
ask_question(fuel_is_ok) :-
write('Look in the carburetor. Can you see or smell gasoline?'),nl.
%
% Explanations for the various diagnoses
%
explain(wrong_gear) :-
nl,
write('Check that the gearshift is set to Park or Neutral.'),nl,
write('Try jiggling the gearshift lever.'),nl.
explain(starting_system) :-
nl,
write('Check for a defective battery, voltage'),nl,
write('regulator, or alternator; if any of these is'),nl,
write('the problem, charging the battery or jump-'),nl,
write('starting may get the car going temporarily.'),nl,
write('Or the starter itself may be defective.'),nl.
explain(drained_battery) :-
nl,
write('Your attempts to start the car have run down the battery.'),nl,
write('Recharging or jump-starting will be necessary.'),nl,
write('But there is probably nothing wrong with the battery itself.'),nl.
explain(fuel_system) :-
nl,
write('Check whether there is fuel in the tank.'),nl,
write('If so, check for a clogged fuel line or filter'),nl,
write('or a defective fuel pump.'),nl.
explain(ignition_system) :-
nl,
write('Check the spark plugs, cables, distributor,'),nl,
write('coil, and other parts of the ignition system.'),nl,
write('If any of these are visibly defective or long'),nl,
write('overdue for replacement, replace them; if this'),nl,
write('does not solve the problem, consult a mechanic.'),nl.
V: Interfejs w Javie