Пример. Игровая программа “Угадайка” (обратная цепочка рассуждений)
domains
database
db_confirm(symbol,symbol) % база знаний из фактов да
db_denied(symbol,symbol) % база знаний из фактов нет
predicates
confirm(symbol,symbol) % характерные признаки животного
denied(symbol,symbol)
check_it(symbol,symbol) % ввод ответа
remember(symbol,symbol,symbol) % запись в базу
identify(symbol) % описание конкретного факта (животного)
it_s(symbol) % классификация животного
animals
clauses
confirm(X,Y) if db_confirm(X,Y),!.
confirm(X,Y) if not(denied(X,Y)),! and check_it(X,Y).
denied(X,Y) if db_denied(X,Y),!.
check_it(X,Y):-
write(X, "OHO ",Y,"\n"), readln(Reply), remember(X,Y,Reply).
remember(X,Y,y):- asserta(db_confirm(X,Y)).
remember(X,Y,n):- asserta(db_denied(X,Y)), fail.
it_s("птица") if
not(it_s("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
it_s("рыба") if
confirm("","плавает"), confirm("","в чешуе"),!.
it_s("млекопитающееся") if
confirm(" ","кормит детенышей молоком"),!.
it_s("травоядное") if it_s("млекопитающееся"), confirm("","копыта"), confirm("","жует траву"),!.
it_s("хищник") ifconfirm(" ","ест мясо"),!.
it_s("птица") if confirm("","перья"), confirm("","летает"), confirm(" ","несет яйца"),!.
identify("орел") if it_s("птица"), confirm("имеет","острый клюв"), it_s("хищник").
identify("жираф") if
it_s("травоядное") and
confirm("имеет","длинная шея") and confirm("имеет","длинные ноги") and
confirm("имеет","темные пятна"),!.
identify("корова") if
it_s("травоядное") and confirm("","рога"),!.
identify("зебра") if
it_s("травоядное") and confirm("","черные полосы"),!.
identify("тигр") if
it_s("млекопитающееся") and it_s("хищник") and
confirm("","рыжевато-коричневого цвета") and
confirm("","когти") and confirm("","полосатый"),!.
identify("страус") if
it_s("птица") and confirm("","длинные ноги") and not( confirm("","летает")) and
confirm("","несет яйца"),!.
identify("пингвин") if
it_s("птица") and not(confirm("","летает")) and confirm("","плавает") and
confirm("","несет яйца") and confirm("","черно-белый окрас"),!.
identify("кашалот") if
it_s("млекопитающееся") and not(it_s("хищник")) and
confirm("","плавает") and confirm("","большого размера"),!.
identify("осьминог") if
not(it_s("млекопитающееся")) and confirm("","с длинными щупальцами") and
confirm("","плавает") and confirm("","с клювом"),!.
identify("сардина") if
it_s("рыба") and confirm("","маленького размера") and
confirm("","служит начинкой сендвича"),!.
identify("неопределено").
animals if identify(X),
write("Задуманное животное ",X),nl,!.
goal
write("ЗАДУМАЙТЕ ЖИВОТНОЕ: орел,жираф,тигр,корова",
"сардина,осьминог,кашалот,пингвин,страус"),nl,
animals.
Пример. Игровая программа “Угадайка” (прямая цепочка рассуждений )
domains
database
db_confirm(symbol,symbol)
db_denied(symbol,symbol)
have_found(symbol)
predicates
confirm(symbol,symbol)
denied(symbol,symbol)
check_it(symbol,symbol)
remember(symbol,symbol,symbol)
it_is(symbol)
find_animal
test1(symbol)
test2(symbol,symbol)
test3(symbol,symbol,symbol)
test4(symbol,symbol,symbol,symbol)
guess_animal
clauses
find_animal if
test1(X),test2(X,Y),test3(X,Y,Z),test4(X,Y,Z,_),!.
find_animal.
% Правила 1 уровня классификации
test1(m) if it_is("млекопитающееся"),!.
test1(n).
% Правила 2 уровня классификации
test2(m,c) if it_is("хищник"),!.
test2(m,n).
test2(n,w) if confirm("","плавает"),!.
test2(n,n).
% Правила 3 уровня классификации
test3(m,c,s) if confirm("","полосатый"), asserta(have_found("тигр !")),!.
test3(m,c,n) if asserta(have_found("гепард !")).
test3(m,n,l) if not( confirm("","плавает")), not( confirm("","летает")),!.
test3(m,n,n) if asserta(have_found("голубой кит !")).
test3(n,n,f) if confirm("","летает"), asserta(have_found("орел")),!.
test3(n,n,n) if asserta(have_found("страус!")).
test3(n,w,t) if confirm("","щупальце"), asserta(have_found("осьминог!")),!.
test3(n,w,n).
% Правила 4 уровня классификации
test4(m,n,l,s) if confirm("","полосатый"), asserta(have_found("зебра !")),!.
test4(m,n,l,n) if asserta(have_found("жираф !")).
test4(n,w,n,f) if confirm("","крылья"), asserta(have_found("пингвин !")),!.
test4(n,w,n,n) if asserta(have_found("сардина!")).
guess_animal
if find_animal, have_found(X), write("Задуманное животное ",X),nl,!.
confirm(X,Y) if db_confirm(X,Y),!.
confirm(X,Y) if not(denied(X,Y)),! and check_it(X,Y).
denied(X,Y) if db_denied(X,Y),!.
check_it(X,Y):- write(X, "?",Y,"\n"), readln(Reply), remember(X,Y,Reply).
remember(X,Y,y):- asserta(db_confirm(X,Y)).
remember(X,Y,n):- asserta(db_confirm(X,Y)), fail.
it_is("птица") if
not (it_is ("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
it_is("рыба") if
confirm("","плавает"), confirm("","чешую"),!.
it_is("млекопитающееся") if confirm(" ","кормит детенышей молоком"),!.
it_is("травоядное") if
it_is("млекопитающееся"), confirm("","копыта"), confirm("","жует траву"),!.
it_is("хищник") if it_is("млекопитающееся"), confirm(" ","ест мясо"),!.
it_is("птица") if not(it_is("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
identify("орел") if
it_is("птица") and confirm("","острый клюв") and it_is("хищник") and
confirm("","национальный символ"),!.
identify("жираф") if
it_is("травоядное") and confirm("","длинная шея") and
confirm("","длинные ноги") and onfirm("","темные пятна"),!.
identify("корова") if it_is("травоядное") and confirm("","рога"),!.
identify("зебра") if it_is("травоядное") and confirm("","черные полосы"),!.
identify("тигр") if
it_is("млекопитающее") and it_is("хищник") and confirm("","рыжевато-коричневого цвета") and confirm("","когти") and сonfirm("","полосатый"),!.
identify("страус") if it_is("птица") and confirm("","длинные ноги") and not( confirm("","летает")) and confirm("","несет яйца"),!.
identify("пингвин") if it_is("птица") and not(confirm("","летает")) and confirm("","плавает") and
confirm("","несет яйца") and confirm("","черно-белый окрас"),!.
identify("кашалот") if
it_is("млекопитающееся") and confirm("","плавает") and confirm("","большой размер"),!.
identify("осьминог") if
not(it_is("млекопитающееся")) and confirm("","длинные щупальца") and
confirm("","плавает") and confirm("","клюв"),!.
identify("сардина") if
it_is("рыба") and confirm("","маленькогo размера") and
confirm("","начинка сендвича"),!.
identify("неопределено").
goal
guess_animal.
Пример. Игровая программа “Угадайка” (обратная цепочка рассуждений)
domains
database
db_confirm(symbol,symbol) % база знаний из фактов да
db_denied(symbol,symbol) % база знаний из фактов нет
predicates
confirm(symbol,symbol) % характерные признаки животного
denied(symbol,symbol)
check_it(symbol,symbol) % ввод ответа
remember(symbol,symbol,symbol) % запись в базу
identify(symbol) % описание конкретного факта (животного)
it_s(symbol) % классификация животного
animals
clauses
confirm(X,Y) if db_confirm(X,Y),!.
confirm(X,Y) if not(denied(X,Y)),! and check_it(X,Y).
denied(X,Y) if db_denied(X,Y),!.
check_it(X,Y):-
write(X, "OHO ",Y,"\n"), readln(Reply), remember(X,Y,Reply).
remember(X,Y,y):- asserta(db_confirm(X,Y)).
remember(X,Y,n):- asserta(db_denied(X,Y)), fail.
it_s("птица") if
not(it_s("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
it_s("рыба") if
confirm("","плавает"), confirm("","в чешуе"),!.
it_s("млекопитающееся") if
confirm(" ","кормит детенышей молоком"),!.
it_s("травоядное") if it_s("млекопитающееся"), confirm("","копыта"), confirm("","жует траву"),!.
it_s("хищник") ifconfirm(" ","ест мясо"),!.
it_s("птица") if confirm("","перья"), confirm("","летает"), confirm(" ","несет яйца"),!.
identify("орел") if it_s("птица"), confirm("имеет","острый клюв"), it_s("хищник").
identify("жираф") if
it_s("травоядное") and
confirm("имеет","длинная шея") and confirm("имеет","длинные ноги") and
confirm("имеет","темные пятна"),!.
identify("корова") if
it_s("травоядное") and confirm("","рога"),!.
identify("зебра") if
it_s("травоядное") and confirm("","черные полосы"),!.
identify("тигр") if
it_s("млекопитающееся") and it_s("хищник") and
confirm("","рыжевато-коричневого цвета") and
confirm("","когти") and confirm("","полосатый"),!.
identify("страус") if
it_s("птица") and confirm("","длинные ноги") and not( confirm("","летает")) and
confirm("","несет яйца"),!.
identify("пингвин") if
it_s("птица") and not(confirm("","летает")) and confirm("","плавает") and
confirm("","несет яйца") and confirm("","черно-белый окрас"),!.
identify("кашалот") if
it_s("млекопитающееся") and not(it_s("хищник")) and
confirm("","плавает") and confirm("","большого размера"),!.
identify("осьминог") if
not(it_s("млекопитающееся")) and confirm("","с длинными щупальцами") and
confirm("","плавает") and confirm("","с клювом"),!.
identify("сардина") if
it_s("рыба") and confirm("","маленького размера") and
confirm("","служит начинкой сендвича"),!.
identify("неопределено").
animals if identify(X),
write("Задуманное животное ",X),nl,!.
goal
write("ЗАДУМАЙТЕ ЖИВОТНОЕ: орел,жираф,тигр,корова",
"сардина,осьминог,кашалот,пингвин,страус"),nl,
animals.
Пример. Игровая программа “Угадайка” (прямая цепочка рассуждений )
domains
database
db_confirm(symbol,symbol)
db_denied(symbol,symbol)
have_found(symbol)
predicates
confirm(symbol,symbol)
denied(symbol,symbol)
check_it(symbol,symbol)
remember(symbol,symbol,symbol)
it_is(symbol)
find_animal
test1(symbol)
test2(symbol,symbol)
test3(symbol,symbol,symbol)
test4(symbol,symbol,symbol,symbol)
guess_animal
clauses
find_animal if
test1(X),test2(X,Y),test3(X,Y,Z),test4(X,Y,Z,_),!.
find_animal.
% Правила 1 уровня классификации
test1(m) if it_is("млекопитающееся"),!.
test1(n).
% Правила 2 уровня классификации
test2(m,c) if it_is("хищник"),!.
test2(m,n).
test2(n,w) if confirm("","плавает"),!.
test2(n,n).
% Правила 3 уровня классификации
test3(m,c,s) if confirm("","полосатый"), asserta(have_found("тигр !")),!.
test3(m,c,n) if asserta(have_found("гепард !")).
test3(m,n,l) if not( confirm("","плавает")), not( confirm("","летает")),!.
test3(m,n,n) if asserta(have_found("голубой кит !")).
test3(n,n,f) if confirm("","летает"), asserta(have_found("орел")),!.
test3(n,n,n) if asserta(have_found("страус!")).
test3(n,w,t) if confirm("","щупальце"), asserta(have_found("осьминог!")),!.
test3(n,w,n).
% Правила 4 уровня классификации
test4(m,n,l,s) if confirm("","полосатый"), asserta(have_found("зебра !")),!.
test4(m,n,l,n) if asserta(have_found("жираф !")).
test4(n,w,n,f) if confirm("","крылья"), asserta(have_found("пингвин !")),!.
test4(n,w,n,n) if asserta(have_found("сардина!")).
guess_animal
if find_animal, have_found(X), write("Задуманное животное ",X),nl,!.
confirm(X,Y) if db_confirm(X,Y),!.
confirm(X,Y) if not(denied(X,Y)),! and check_it(X,Y).
denied(X,Y) if db_denied(X,Y),!.
check_it(X,Y):- write(X, "?",Y,"\n"), readln(Reply), remember(X,Y,Reply).
remember(X,Y,y):- asserta(db_confirm(X,Y)).
remember(X,Y,n):- asserta(db_confirm(X,Y)), fail.
it_is("птица") if
not (it_is ("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
it_is("рыба") if
confirm("","плавает"), confirm("","чешую"),!.
it_is("млекопитающееся") if confirm(" ","кормит детенышей молоком"),!.
it_is("травоядное") if
it_is("млекопитающееся"), confirm("","копыта"), confirm("","жует траву"),!.
it_is("хищник") if it_is("млекопитающееся"), confirm(" ","ест мясо"),!.
it_is("птица") if not(it_is("млекопитающееся")), confirm("","перья"), confirm("","летает"),
confirm(" ","несет яйца"),!.
identify("орел") if
it_is("птица") and confirm("","острый клюв") and it_is("хищник") and
confirm("","национальный символ"),!.
identify("жираф") if
it_is("травоядное") and confirm("","длинная шея") and
confirm("","длинные ноги") and onfirm("","темные пятна"),!.
identify("корова") if it_is("травоядное") and confirm("","рога"),!.
identify("зебра") if it_is("травоядное") and confirm("","черные полосы"),!.
identify("тигр") if
it_is("млекопитающее") and it_is("хищник") and confirm("","рыжевато-коричневого цвета") and confirm("","когти") and сonfirm("","полосатый"),!.
identify("страус") if it_is("птица") and confirm("","длинные ноги") and not( confirm("","летает")) and confirm("","несет яйца"),!.
identify("пингвин") if it_is("птица") and not(confirm("","летает")) and confirm("","плавает") and
confirm("","несет яйца") and confirm("","черно-белый окрас"),!.
identify("кашалот") if
it_is("млекопитающееся") and confirm("","плавает") and confirm("","большой размер"),!.
identify("осьминог") if
not(it_is("млекопитающееся")) and confirm("","длинные щупальца") and
confirm("","плавает") and confirm("","клюв"),!.
identify("сардина") if
it_is("рыба") and confirm("","маленькогo размера") and
confirm("","начинка сендвича"),!.
identify("неопределено").
goal
guess_animal.