/* Program Lab_6_1.PRO */
/* Назначение. Демонстрация работы экспертной системы. */
/* Это продукционная система, базирующаяся на правилах */
/* Замечание: это система для идентификации породы. Система */
/* использует множество продукционных правил для вывода */
/* решения */
domains
database
xpositive(symbol,symbol)
xnegative(symbol,symbol)
predicates
do_expert_job
do_consulting
ask(symbol,symbol)
jivotnoe_is(symbol)
it_is(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,symbol)
clear_facts
clauses
/* Система пользовательского интерфейса (СПИ) */
do_expert_job :-
nl,write(«* * * * * * * * * * * * * * * * * * * *»),
nl,write(» WELCOME TO A DOG EXPERT SYSTEM «),
nl,write(» «),
nl,write(«This is a dog identification system. «),
nl,write(«Please answer the question about «),
nl,write(«the dog you would like by typing in «),
nl,write(«‘yes’ or ‘no’. «),
nl,write(«* * * * * * * * * * * * * * * * * * * *»),
nl,nl,
do_consulting,
write(«Press space bar.»),nl,
exit.
do_consulting :-
jivotnoe_is(X),!,nl,
write(«pozdravleaem vi nashli (n)»,X,».»),nl,
clear_facts.
do_consulting :-
nl,write(«Sorry I can’t help you ! «),
clear_facts.
ask(X,Y) :-
write(» Question :- «,X,» it «,Y,» ?»),
readln(Reply),
remember(X,Y,Reply).
/* МЕХАНИЗМ ВЫВОДА */
positive(X,Y) :-
xpositive(X,Y),!.
positive(X,Y) :-
not(negative(X,Y)),!,
ask(X,Y).
negative(X,Y) :-
xnegative(X,Y),!.
remember(X,Y,yes) :-
asserta(xpositive(X,Y)).
remember(X,Y,no) :-
asserta(xnegative(X,Y)),
fail.
clear_facts :-
retract(xpositive(_,_)),
fail.
clear_facts :-
retract(xnegative(_,_)),
fail.
/* ПРОДУКЦИОННЫЕ ПРАВИЛА */
jivotnoe_is(«Pig») :-
it_is(«non haired animal»),
positive(has,»imeet bolee 50 cantimetre»),
positive(has,»pyatachok»),
positive(has,»hvost kolechkom»),
positive(has,»longer ushi»),!.
jivotnoe_is(«Koza») :-
it_is(«non haired animal»),
positive(has,»height under 1 metre»),
positive(has,»longer ears»),
positive(has,»roga»),
positive(has,»vimya»),
positive(has,»hvost»),!.
jivotnoe_is(«dog») :-
it_is(«havired»),
positive(has,»rost do 50 centimetre»),
positive(has,»dlinnie ushi»),
positive(has,»ono gavkaet»),
positive(has,»hvost»),!.
jivotnoe_is(«Krolik») :-
it_is(«haired»),
positive(has,»ves do 5 kg»),
positive(has,»korotkii hvost»),
positive(has,»longer ears»),
positive(has,»cenniy meh»),!.
jivotnoe_is(«Akula») :-
it_is(«non haired animal»),
positive(has,»bolee 500 kg»),
positive(has,»plavniki»),
positive(has,»many zubov»),!.
jivotnoe_is(«Loshadka») :-
it_is(«haired»),
positive(has,»tail and griva»),
positive(has,»kopita»),
positive(has,»big ushi»),
positive(has,»vityanutaya morda»),!.
jivotnoe_is(«Korova») :-
it_is(«haired»),
positive(has,»big nos»),
positive(has,»roga»),
positive(has,»kopita»),
positive(has,»hvost»),
positive(has,»vimya»),
positive(has,»moloko»),
positive(has,»weight over 100 kg»),!.
it_is(«non haired animal») :-
positive(has,»non haired animal»),!.
it_is(«haired») :-
positive(has,»long-haired»),!.
goal
do_expert_job.