Тема: Пролог - Экспертная система по определению цветка.
domains
database
xpositive(symbol,symbol)
xnegative(symbol,symbol)
predicates
do_expert_job
do_consulting
ask(symbol,symbol)
dog_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(" Экспертная система по определению цветка "),
nl,write(" "),
nl,write("Необходимо отвечать на вопросы о "),
nl,write("цветах YES или NO "),
nl,nl,
do_consulting,
write("Нажмите пробел"),nl,
exit.
do_consulting :-
dog_is(X),!,nl,
write("Данный цветок - это a(n)",X,"."),nl,
clear_facts.
do_consulting :-
nl,write("Изивините, ничем не можем вам помочь"),
clear_facts.
ask(X,Y) :-
write(" Вопрос :- ",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.
/* ПРОДУКЦИОННЫЕ ПРАВИЛА */
dog_is("Мак") :-
it_is("многолетнее"),
positive(has,"высота от 5 до 10 см"),
positive(has,"стебель ветвистый"),
positive(has,"крупные цветки"),
positive(has,"листья перистораздельные"),!.
dog_is("Ромашка") :-
it_is("однолетнее"),
positive(has,"высота от 15 до 40 см"),
positive(has,"стебель ветвистый"),
positive(has,"лекарственное"),
positive(has,"цветет в период май-сентябрь"),
positive(has,"листья перистораздельные"),!.
dog_is("Лилия") :-
it_is("многолетнее"),
positive(has,"стебель маловетвистый"),
positive(has,"высота от 16 до 18 см"),
positive(has,"листья острые"),
positive(has,"прорастает из луковицы"),
positive(has,"вес больше 100 фунтов"),!.
/* dog_is("American Foxhound") :-
it_is("короткая шерсть"),
positive(has,"рост меньше 30 дюймов"),
positive(has,"длинные уши"),
positive(has,"хороший характер"),!.
dog_is("Cocker Spaniel") :-
it_is("длинная шерсть"),
positive(has,"рост меньше 22 дюймов"),
positive(has,"низкопосаженный хвост"),
positive(has,"длинные уши"),
positive(has,"хороший характер"),!.
dog_is("Irish Setter") :-
it_is("длинная шерсть"),
positive(has,"рост меньше 30 дюймов"),
positive(has,"длинные уши"),!.
dog_is("Collie") :-
it_is("длинная шерсть"),
positive(has,"рост меньше 30 дюймов"),
positive(has,"низкопосаженный хвост"),
positive(has,"хороший характер"),!.
dog_is("St. Bernard") :-
it_is("длинная шерсть"),
positive(has,"низкопосаженный хвост"),
positive(has,"хороший характер"),
positive(has,"вес больше 100 фунтов"),!.*/
it_is("многолетнее") :-
positive(has," многолетнее "),!.
it_is("однолетнее") :-
positive(has," однолетнее"),!.
goal
do_expert_job.