Модифицируйте программу, добавив в меню пункты:
1) Вывод списка игроков.
2) Сохранение данных в файл.
3) Выборка данных по 1 из трех критериев.
Лабораторная работа №9. Применение языка для решения задач ИИ. Создание экспертных систем
Пример 1. Рассмотрим пример ЭС для идентификации породы собак. Она помогает потенциальному хозяину выбрать породу собаки в соответствие с определенными критериями.
В данной ЭС используются следующие характеристики:
1. Короткая шерсть;
2. Длинная шерсть;
3. Рост меньше 30 дюймов;
4. Рост меньше 22 дюймов;
5. Низкопосаженный хвост;
6. Длинные уши;
7. Хороший характер
8. Вес больше 100 фунтов.
Каждая характеристика для конкретной породы либо верна, либо не верна. Для каждой породы справедливы следующие характеристики:
Таблица 13.
Характеристики собак
Порода | Характеристики |
Английский бульдог | 1,4,5,7 |
Гончая | 1,4,6,7 |
Дог | 1,3,6,7,8 |
Амер.гончая | 1,5,6,7 |
Кокер-спаниэль | 2,4,5,6,7 |
Ирландский сеттер | 2,3,6 |
Колли | 2,3,5,7 |
Сенбернар | 2,5,7,8 |
Программа 33. «Эксперт по породам собак»
*Эксперт по породам собак*/
/*Назначение: Демонстрация работы ЭС*/
Domains
n=integer
list=n*
dog=symbol
Predicates
rule(n,dog,list)
cond(n,string)
do_expert
show_menu
do_consulting
process(n)
test(n,list)
topic
repeat
Goal
do_expert.
Clauses
rule(1,"английский бульдог",[1,4,5,7]).
rule(2,"гончая",[1,4,6,7]).
rule(3,"дог",[1,3,6,7,8]).
rule(4,"американская гончая",[1,5,6,7]).
rule(5,"коккер-спаниель",[2,4,5,6,7]).
rule(6,"ирландский сеттер",[2,3,6]).
rule(7,"колли",[2,3,5,7]).
rule(8,"сенбернар",[2,5,7,8]).
/*Характеристики*/
cond(1,"короткошерстная").
cond(2,"длинношерстная").
cond(3,"рост ниже 30 дюймов").
cond(4,"рост ниже 22 дюймов").
cond(5,"низкопосаженный хвост").
cond(6,"большие уши").
cond(7,"хороший характер").
cond(8,"вес более 100 фунтов").
do_expert:-
makewindow(1,7,5,"ЭКСПЕРТНАЯ СИСТЕМА",0,0,25,80),
show_menu.
repeat.
repeat:-repeat.
/*Вывод меню*/
show_menu:-
repeat,
write("***************************"),nl,
write("*****Добро пожаловать!*****"),nl,
write("* *"),nl,
write("*****1-консультация********"),nl,
write("*****2-список**************"),nl,
write("*****3-выход***************"),nl,
write("* *"),nl,
write("****Сделайте свой выбор****"),nl,
readint(X),
process(X),fail.
/*Обработка 1 пункта меню “Консультация”*/
process(1):-
do_consulting,
readchar(_),
shiftwindow(1),
clearwindow.
/*Обработка 2 пункта меню “Вывод списка”*/
process(2):-
makewindow(2,7,7,"",5,20,12,25),
topic,
readchar(_),
shiftwindow(1),
clearwindow.
/* Обработка 3 пункта меню “Выход”*/
process(3):-
removewindow,
exit.
/*Вывод пород собак*/
topic:-
rule(X,Y,_),
write(X,". ",Y),
nl,fail.
topic.
/*Консультация*/
do_consulting:-
test(1,List),
rule(_,X,List),
write("Ваш выбор:",X),!.
do_consulting:-
write("Мне жаль, что не смог Вам помочь.").
/*Тестирование*/
test(9,[]):-!.
test(1,[N|List]):-
cond(N,Text),
makewindow(2,7,7,"",5,20,10,35),
write("Вопрос:-",Text,"?"),nl,
write("1-да"),nl,
write("0-нет"),nl,
readint(R),R=1,!,test(3,List).
test(1,List):- test(2,List),!.
test(N,[N|List]):-
cond(N,Text),
makewindow(2,7,7,"",5,20,10,35),
write("Вопрос:-",Text,"?"),nl,
write("1-да"), nl,
write("0-нет"), nl,
readint(R),M=N+1,
R=1,!,test(M,List).
test(N,List):-M=N+1,test(M,List).