domains
database
/* Предикаты базы данных */
rule
(integer, symbol
,symbol
, conditions
)
predicates
/* Предикаты системы пользовательского интерфейса */
do_expert_job
do_consulting
goes(symbol)
clear
/* Предикаты механизма вывода */
go(history, symbol)
check
(integer, history
, conditions
)
goal
do_expert_job.
clauses
/* База знаний (БЗ) */
rule(1, "Собака", "Короткошерстная собака", [1]).
rule(2, "Собака", "Длинношерстная собака ", [2]).
rule(3, "Короткошерстная собака","Английский бульдог",[3,5,7]).
rule(4, "Короткошерстная собака","Гончая", [3,6,7]).
rule(5, "Короткошерстная собака","Немецкий Дог", [5,6,7,8]).
rule(6, "Короткошерстная собака","Американский фоксхаунд",
[4,6,7]).
rule(7, "Длинношерстная собака ", "Кокер спаниель", [3,5,6,7]).
rule(8, "Длинношерстная собака ", "Ирландский Сеттер", [4,6]).
rule(9, "Длинношерстная собака ", "Колли", [4,5,7]).
rule(10, "Длинношерстная собака ", "Сенбернар", [5,7,8]).
cond(1,"Короткошерстная").
cond(2,"Длинношерстная").
cond(3,"Высота в холке не более 57 см").
cond(4,"Высота в холке не более 77 см ").
cond(5,"Низко посаженный хвост").
cond(6, "Длинные уши").
cond(7, "Дружелюбный характер").
cond(8, "Вес более 45 кг").
/* Система пользовательского интерфейса */
do_expert_job :-
makewindow(1,7,7,"ЭКСПЕРТ ПО ПОРОДАМ СОБАК", 0, 0, 25, 80),
readchar(_), exit.
do_consulting :-goes(Mygoal),go([],Mygoal),!.
do_consulting
:-nl, write("Извините
, я не смогу Вам помочь"
) ,clear
.
do_consulting.
goes
(Mygoal
) :- clear
,clearwindow
, nl, nl,nl,nl,
write("Проводится идентификация породы"
),nl,
write("Для того
, чтобы начать процесс идентификации
,"
),nl,
write("введите слово
'Собака'. "
), nl, nl, readln
(Mygoal
),!.
inpo
(HISTORY
,RNO
,BNO
,TEXT
) :-write("?
:- "
,TEXT
," ? "
),
makewindow(2,7,7,"Для ответа на вопрос",10,54,7,35),
write("введите
1, если Ваш ответ
'да' ,"
),
write("введите
2, если Ваш ответ
'нет' ,"
),
write("введите
0, для выхода из системы"
),nl,
readint(RESPONSE),
clearwindow,shiftwindow(1),
do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).
/* Механизм вывода */
go(HISTORY, Mygoal) :-rule(RNO,Mygoal,NY,COND),
check(RNO,HISTORY,COND),!,
go([RNO|HISTORY],NY).
go(_,Mygoal) :-not(rule(_,Mygoal,_,_)),!,
check(RNO,HISTORY,[BNO|REST]) :-
yes(BNO),!,check(RNO,HISTORY,REST).
check
(_
,_
,[BNO
|_
]) :- no
(BNO
),!,fail.
check(RNO,HISTORY,[BNO|REST]) :-cond(BNO,TEXT),
inpo(HISTORY,RNO,BNO,TEXT),
check(RNO,HISTORY,REST).
check(_,_,[]).
do_answer(_,_,_,_,0):- exit.
do_answer
(_
,_
,_
,BNO
,1) :-assert
(yes
(BNO
)),write(yes
),nl.
do_answer
(_
,_
,_
,BNO
,2) :-assert
(no
(BNO
)),write(no
),nl,fail.
clear.
ZG9tYWlucwoKY29uZGl0aW9ucyA9IGludGVnZXIgKgoKaGlzdG9yeSA9IGludGVnZXIgKgoKZGF0YWJhc2UKCi8qINCf0YDQtdC00LjQutCw0YLRiyDQsdCw0LfRiyDQtNCw0L3QvdGL0YUgKi8KCnJ1bGUoaW50ZWdlciwgc3ltYm9sLHN5bWJvbCwgY29uZGl0aW9ucykKCmNvbmQoaW50ZWdlciwgc3ltYm9sKQoKeWVzKGludGVnZXIpCgpubyhpbnRlZ2VyKQoKcHJlZGljYXRlcwoKLyog0J/RgNC10LTQuNC60LDRgtGLINGB0LjRgdGC0LXQvNGLINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQvtCz0L4g0LjQvdGC0LXRgNGE0LXQudGB0LAgKi8KCmRvX2V4cGVydF9qb2IKCmRvX2NvbnN1bHRpbmcKCmdvZXMoc3ltYm9sKQoKY2xlYXIKCi8qINCf0YDQtdC00LjQutCw0YLRiyDQvNC10YXQsNC90LjQt9C80LAg0LLRi9Cy0L7QtNCwICovCgpnbyhoaXN0b3J5LCBzeW1ib2wpCgpjaGVjayhpbnRlZ2VyLCBoaXN0b3J5LCBjb25kaXRpb25zKQoKSW5wbyhoaXN0b3J5LCBpbnRlZ2VyLCBpbnRlZ2VyLCBzeW1ib2wpCgpkb19hbnN3ZXIoaGlzdG9yeSwgaW50ZWdlciwgc3ltYm9sLGludGVnZXIsIGludGVnZXIpCgpnb2FsCgpkb19leHBlcnRfam9iLgoKY2xhdXNlcwoKLyog0JHQsNC30LAg0LfQvdCw0L3QuNC5ICjQkdCXKSAqLwoKcnVsZSgxLCAi0KHQvtCx0LDQutCwIiwgItCa0L7RgNC+0YLQutC+0YjQtdGA0YHRgtC90LDRjyDRgdC+0LHQsNC60LAiLCBbMV0pLgoKcnVsZSgyLCAi0KHQvtCx0LDQutCwIiwgItCU0LvQuNC90L3QvtGI0LXRgNGB0YLQvdCw0Y8g0YHQvtCx0LDQutCwICIsIFsyXSkuCgpydWxlKDMsICLQmtC+0YDQvtGC0LrQvtGI0LXRgNGB0YLQvdCw0Y8g0YHQvtCx0LDQutCwIiwi0JDQvdCz0LvQuNC50YHQutC40Lkg0LHRg9C70YzQtNC+0LMiLFszLDUsN10pLgoKcnVsZSg0LCAi0JrQvtGA0L7RgtC60L7RiNC10YDRgdGC0L3QsNGPINGB0L7QsdCw0LrQsCIsItCT0L7QvdGH0LDRjyIsIFszLDYsN10pLgoKcnVsZSg1LCAi0JrQvtGA0L7RgtC60L7RiNC10YDRgdGC0L3QsNGPINGB0L7QsdCw0LrQsCIsItCd0LXQvNC10YbQutC40Lkg0JTQvtCzIiwgWzUsNiw3LDhdKS4KCnJ1bGUoNiwgItCa0L7RgNC+0YLQutC+0YjQtdGA0YHRgtC90LDRjyDRgdC+0LHQsNC60LAiLCLQkNC80LXRgNC40LrQsNC90YHQutC40Lkg0YTQvtC60YHRhdCw0YPQvdC0IiwKCls0LDYsN10pLgoKcnVsZSg3LCAi0JTQu9C40L3QvdC+0YjQtdGA0YHRgtC90LDRjyDRgdC+0LHQsNC60LAgIiwgItCa0L7QutC10YAg0YHQv9Cw0L3QuNC10LvRjCIsIFszLDUsNiw3XSkuCgpydWxlKDgsICLQlNC70LjQvdC90L7RiNC10YDRgdGC0L3QsNGPINGB0L7QsdCw0LrQsCAiLCAi0JjRgNC70LDQvdC00YHQutC40Lkg0KHQtdGC0YLQtdGAIiwgWzQsNl0pLgoKcnVsZSg5LCAi0JTQu9C40L3QvdC+0YjQtdGA0YHRgtC90LDRjyDRgdC+0LHQsNC60LAgIiwgItCa0L7Qu9C70LgiLCBbNCw1LDddKS4KCnJ1bGUoMTAsICLQlNC70LjQvdC90L7RiNC10YDRgdGC0L3QsNGPINGB0L7QsdCw0LrQsCAiLCAi0KHQtdC90LHQtdGA0L3QsNGAIiwgWzUsNyw4XSkuCgpjb25kKDEsItCa0L7RgNC+0YLQutC+0YjQtdGA0YHRgtC90LDRjyIpLgoKY29uZCgyLCLQlNC70LjQvdC90L7RiNC10YDRgdGC0L3QsNGPIikuCgpjb25kKDMsItCS0YvRgdC+0YLQsCDQsiDRhdC+0LvQutC1INC90LUg0LHQvtC70LXQtSA1NyDRgdC8IikuCgpjb25kKDQsItCS0YvRgdC+0YLQsCDQsiDRhdC+0LvQutC1INC90LUg0LHQvtC70LXQtSA3NyDRgdC8ICIpLgoKY29uZCg1LCLQndC40LfQutC+INC/0L7RgdCw0LbQtdC90L3Ri9C5INGF0LLQvtGB0YIiKS4KCmNvbmQoNiwgItCU0LvQuNC90L3Ri9C1INGD0YjQuCIpLgoKY29uZCg3LCAi0JTRgNGD0LbQtdC70Y7QsdC90YvQuSDRhdCw0YDQsNC60YLQtdGAIikuCgpjb25kKDgsICLQktC10YEg0LHQvtC70LXQtSA0NSDQutCzIikuCgovKiDQodC40YHRgtC10LzQsCDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60L7Qs9C+INC40L3RgtC10YDRhNC10LnRgdCwICovCgpkb19leHBlcnRfam9iIDotCgptYWtld2luZG93KDEsNyw3LCLQrdCa0KHQn9CV0KDQoiDQn9CeINCf0J7QoNCe0JTQkNCcINCh0J7QkdCQ0JoiLCAwLCAwLCAyNSwgODApLAoKZG9fY29uc3VsdGluZywgbmwsIG5sLCBubCwgbmwsIHdyaXRlKCLQndCw0LbQvNC40YLQtSDQu9GO0LHRg9GOINC60LvQsNCy0LjRiNGDIiksCgpyZWFkY2hhcihfKSwgZXhpdC4KCmRvX2NvbnN1bHRpbmcgOi1nb2VzKE15Z29hbCksZ28oW10sTXlnb2FsKSwhLgoKZG9fY29uc3VsdGluZyA6LW5sLCB3cml0ZSgi0JjQt9Cy0LjQvdC40YLQtSwg0Y8g0L3QtSDRgdC80L7Qs9GDINCS0LDQvCDQv9C+0LzQvtGH0YwiKSAsY2xlYXIuCgpkb19jb25zdWx0aW5nLgoKZ29lcyhNeWdvYWwpIDotIGNsZWFyLGNsZWFyd2luZG93LCBubCwgbmwsbmwsbmwsCgp3cml0ZSgi0JTQntCR0KDQniDQn9Ce0JbQkNCb0J7QktCQ0KLQrCIpLG5sLCBubCwgbmwsCgp3cml0ZSgi0J/RgNC+0LLQvtC00LjRgtGB0Y8g0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Y8g0L/QvtGA0L7QtNGLIiksbmwsCgp3cml0ZSgi0JTQu9GPINGC0L7Qs9C+LCDRh9GC0L7QsdGLINC90LDRh9Cw0YLRjCDQv9GA0L7RhtC10YHRgSDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjQuCwiKSxubCwKCndyaXRlKCLQstCy0LXQtNC40YLQtSDRgdC70L7QstC+ICfQodC+0LHQsNC60LAnLiAiKSwgbmwsIG5sLCByZWFkbG4oTXlnb2FsKSwhLgoKaW5wbyhISVNUT1JZLFJOTyxCTk8sVEVYVCkgOi13cml0ZSgiPzotICIsVEVYVCwiID8gIiksCgptYWtld2luZG93KDIsNyw3LCLQlNC70Y8g0L7RgtCy0LXRgtCwINC90LAg0LLQvtC/0YDQvtGBIiwxMCw1NCw3LDM1KSwKCndyaXRlKCLQstCy0LXQtNC40YLQtSAxLCDQtdGB0LvQuCDQktCw0Ygg0L7RgtCy0LXRgiAn0LTQsCcgLCIpLAoKd3JpdGUoItCy0LLQtdC00LjRgtC1IDIsINC10YHQu9C4INCS0LDRiCDQvtGC0LLQtdGCICfQvdC10YInICwiKSwKCndyaXRlKCLQstCy0LXQtNC40YLQtSAwLCDQtNC70Y8g0LLRi9GF0L7QtNCwINC40Lcg0YHQuNGB0YLQtdC80YsiKSxubCwKCnJlYWRpbnQoUkVTUE9OU0UpLAoKY2xlYXJ3aW5kb3csc2hpZnR3aW5kb3coMSksCgpkb19hbnN3ZXIoSElTVE9SWSxSTk8sVEVYVCxCTk8sUkVTUE9OU0UpLgoKLyog0JzQtdGF0LDQvdC40LfQvCDQstGL0LLQvtC00LAgKi8KCmdvKEhJU1RPUlksIE15Z29hbCkgOi1ydWxlKFJOTyxNeWdvYWwsTlksQ09ORCksCgpjaGVjayhSTk8sSElTVE9SWSxDT05EKSwhLAoKZ28oW1JOT3xISVNUT1JZXSxOWSkuCgpnbyhfLE15Z29hbCkgOi1ub3QocnVsZShfLE15Z29hbCxfLF8pKSwhLAoKbmwsd3JpdGUoItCS0LXRgNC+0Y/RgtC90L4g0JLQsNGI0LAg0YHQvtCx0LDQutCwIC0gIixNeWdvYWwsIi4iKSwgbmwsIG5sLCBubC4KCmNoZWNrKFJOTyxISVNUT1JZLFtCTk98UkVTVF0pIDotCgp5ZXMoQk5PKSwhLGNoZWNrKFJOTyxISVNUT1JZLFJFU1QpLgoKY2hlY2soXyxfLFtCTk98X10pIDotIG5vKEJOTyksISxmYWlsLgoKY2hlY2soUk5PLEhJU1RPUlksW0JOT3xSRVNUXSkgOi1jb25kKEJOTyxURVhUKSwKCmlucG8oSElTVE9SWSxSTk8sQk5PLFRFWFQpLAoKY2hlY2soUk5PLEhJU1RPUlksUkVTVCkuCgpjaGVjayhfLF8sW10pLgoKZG9fYW5zd2VyKF8sXyxfLF8sMCk6LSBleGl0LgoKZG9fYW5zd2VyKF8sXyxfLEJOTywxKSA6LWFzc2VydCh5ZXMoQk5PKSksd3JpdGUoeWVzKSxubC4KCmRvX2Fuc3dlcihfLF8sXyxCTk8sMikgOi1hc3NlcnQobm8oQk5PKSksd3JpdGUobm8pLG5sLGZhaWwuCgpjbGVhciA6LSByZXRyYWN0KHllcyhfKSkscmV0cmFjdChubyhfKSksZmFpbCwhLgoKY2xlYXIu