Разработка элементов интеллектуальных систем с использованием логической модели представления знаний
Основы логического программирования на примере Visual Prolog 5.2. Описание родственных связей с помощью правил и предикатов. Поиск с возвратом и рекурсия. Программа, реализующая авиасправочник. Решение логических задач на соответствие и поиска решения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 06.08.2013 |
Размер файла | 90,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Разработка элементов интеллектуальных систем с использованием логической модели представления знаний
1. Задание 1
Цель - Знакомство с основами логического программирования (Prolog).
Используя предикаты parent (symbol, symbol), man(symbol), woman(symbol), married (symbol, symbol), записать факты, описывающие Вашу семью. Записать 8 правил вывода для любых родственных отношений в Вашей семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
Описание родственных связей:
Исходный текст:
Predicates
nondeterm parent (symbol, symbol)%roditel, rebenok
nondeterm man (symbol)
nondeterm woman (symbol)
nondeterm married (symbol, symbol) % man, woman
nondeterm mother (symbol, symbol) %woman, rebenok
nondeterm father (symbol, symbol)%man, rebenok
nondeterm daughter (symbol)
nondeterm son (symbol)
nondeterm sister (symbol, symbol) %sestra, object
nondeterm brother (symbol, symbol) %brat, object
nondeterm grandmother (symbol, symbol)%babushka, vnuki
nondeterm grandfather (symbol, symbol)%dedushka, vnuki
nondeterm doublesister (symbol, symbol)%sister, komu
nondeterm doublebrother (symbol, symbol)%brother, komu
nondeterm Wel
nondeterm Menu(integer)
Clauses
man («Gluhov Alexandr»).
man («Gluhov Vladislav»).
man («Gordeev Aleksandr»).
man («Karpenok Jurii»).
man («Shaiahmetov Andrei»).
man («Gluhov Viktor»).
man («Gluhov Vladimir»).
man («Gluhov Maksim»).
woman («Maksutova Nailya»).
woman («Gluhova Marina»).
woman («Gordeeva Valentina»).
woman («Karpenok Natalia»).
woman («Shaiahmetova Alesia»).
woman («Gluhova Galina»).
woman («Gluhova Natalia»).
woman («Gluhova Dana»).
married («Gluhov Alexandr», «Maksutova Nailya»).
married («Gluhov Vladislav», «Gluhova Marina»).
married («Gordeev Aleksandr», «Gordeeva Valentina»).
married («Karpenok Jurii», «Karpenok Natalia»).
married («Shaiahmetov Andrei», «Shaiahmetova Alesia»).
married («Gluhov Viktor», «Gluhova Galina»).
married («Gluhov Vladimir», «Gluhova Natalia»).
parent («Gluhov Vladislav», «Gluhov Alexandr»).
parent («Gordeev Aleksandr», «Gluhova Marina»).
parent («Gordeev Aleksandr», «Karpenok Natalia»).
parent («Karpenok Jurii», «Shaiahmetova Alesia»).
parent («Gluhov Viktor», «Gluhov Vladislav»).
parent («Gluhov Viktor», «Gluhov Vladimir»).
parent («Gluhov Vladimir», «Gluhov Maksim»).
parent («Gluhov Vladimir», «Gluhova Dana»).
parent («Gluhova Marina», «Gluhov Alexandr»).
parent («Gordeeva Valentina», «Gluhova Marina»).
parent («Gordeeva Valentina», «Karpenok Natalia»).
parent («Karpenok Natalia», «Shaiahmetova Alesia»).
parent («Gluhova Galina», «Gluhov Vladislav»).
parent («Gluhova Galina», «Gluhov Vladimir»).
parent («Gluhova Natalia», «Gluhov Maksim»).
parent («Gluhova Natalia», «Gluhova Dana»).
mother (X, Y): - woman(X), parent (X, Y), write («Mother:», X,» Child:», Y), nl, fail.
mother («_», «_»): - nl, write («all mothers»), readln(_), nl, Wel.
%mother d/b zhenshinoi i bit parent
father (X, Y): - man(X), parent (X, Y), write («Father:», X,» Child:», Y), nl, fail.
father («_», «_»): - nl, write («all fathers»), readln(_), nl, Wel.
%d/b muzhchinoi i bit parent
daughter (X): - woman(X), write («Daughter:», X), nl, fail.
daughter («_»): - nl, write («all daughters»), readln(_), nl, Wel.
son (X): - man(X), write («Son:», X), nl, fail.
son («_»): - nl, write («all sons»), readln(_), nl, Wel.
sister (X, Y): - woman(X), parent (Z, X), parent (Z, Y), X<>Y, woman(Z), write («Sister:», X,» To:», Y), nl, fail.
sister («_», «_»): - nl, write («all sisters»), readln(_), nl, Wel.
%sestra d/b zhenshinoi, imet obshego roditelia s objectom, ne bit sestroi samoi sebe.
%Ishem po mame, chtob ne bilo povtorov
brother (X, Y): - man(X), parent (Z, X), parent (Z, Y), X<>Y, woman(Z), write («Brother:», X,» To:», Y), nl, fail.
brother («_», «_»): - nl, write («all brothers»), readln(_), nl, Wel.
%d/b muzhchinoi, imet obshego roditelia s objectom, ne bit bratom samomu sebe.
%Ishem po mame, chtob ne bilo povtorov
grandmother (X, Y): - woman(X), parent (X, Z), parent (Z, Y), write («Granny:», X,» Vnuk(-chka):», Y), nl, fail.
grandmother («_», «_»): - nl, write («all grandmothers»), readln(_), nl, Wel.
%d/b zhenshinoi, i bit parentom parenta vnuka
grandfather (X, Y): - man(X), parent (X, Z), parent (Z, Y), write («Grandpa:», X,» Vnuk(-chka):», Y), nl, fail.
grandfather («_», «_»): - nl, write («all grandfathers»), readln(_), nl, Wel.
%d/b muzhchinoi, i bit parentom parenta vnuka
doublesister (X, Y): - woman(X), parent (Z1, X), parent (Z2, Y), woman(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
write («DoubleSister:», X,» To:», Y), nl, fail;
woman(X), parent (Z1, X), parent (Z2, Y), man(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
write («DoubleSister:», X,» To:», Y), nl, fail.
doublesister («_», «_»): - nl, write («all doublesisters»), readln(_), nl, Wel.
%d/b zhenshinoi, imet raznih roditelei s objectom, kotorie yavliautsa bratom ili sestroi
doublebrother (X, Y): - man(X), parent (Z1, X), parent (Z2, Y), woman(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
write («DoubleBrother:», X,» To:», Y), nl, fail;
man(X), parent (Z1, X), parent (Z2, Y), man(Z1), parent (Z, Z1), parent (Z, Z2), Z1<>Z2, woman(Z),
write («DoubleBrother:», X,» To:», Y), nl, fail.
doublebrother («_», «_»): - nl, write («all doublebrothers»), readln(_), nl, Wel.
%d/b muzhchinoi, imet raznih roditelei s objectom, kotorie yavliautsa bratom ili sestroi
Wel: - write («This is my family»), nl, readchar(_),
write («menu:»), nl,
write («1 - Mothers»), nl,
write («2 - Fathers»), nl,
write («3 - Daughters»), nl,
write («4 - Sons»), nl,
write («5 - Sisters»), nl,
write («6 - Brothers»), nl,
write («7 - Grandmothers»), nl,
write («8 - Grandfathers»), nl,
write («9 - Doublesisters»), nl,
write («10 - Doublebrothers»), nl,
write («11 - Vihod»), nl,
write («Viberite punkt menu:»),
readint(M), Menu(M).
%Вводный экран с описанием меню.
Menu(M): - M=1, write («Mothers:»), nl, mother(_,_).
Menu(M): - M=2, write («Fathers:»), nl, father(_,_).
Menu(M): - M=3, write («Daughters:»), nl, daughter(_).
Menu(M): - M=4, write («Sons:»), nl, son(_).
Menu(M): - M=5, write («Sisters:»), nl, sister(_,_).
Menu(M): - M=6, write («Brothers:»), nl, brother(_,_).
Menu(M): - M=7, write («Grandmothers:»), nl, grandmother(_,_).
Menu(M): - M=8, write («Grandfathers:»), nl, grandfather(_,_).
Menu(M): - M=9, write («Doublesisters:»), nl, doublesister(_,_).
Menu(M): - M=10, write («Doublebrothers:»), nl, doublebrother(_,_).
Menu(M): - M=11, write («Goodbye!!!»), exit.
Menu(M): - M>11, write («Mozhet vi poprobuete eshe razok?»), readchar(_), nl, Wel.
%Менюшка, отвечает на любые числа, зацикливает. Выход черех 11.
Goal
Wel.
В данном задании я ознакомился с основами программирования на Prolog (Visual Prolog 5.2), а также описал свою семью с помощью правил и предикатов.
2. Задание 2
Цель - Поиск с возвратом и рекурсия.
Подсчитать, сколько раз встречается некоторая буква в строке. Строка и буква должны вводиться с клавиатуры. Для разделения строки на символы использовать стандартный предикат frontchar (String, Char, StringRest), позволяющий разделять строку String на первый символ Char и остаток строки StringRest.
Исходный текст:
Predicates
nondeterm find (String, Char, String)
Clauses
find (X, Y, Z): - frontchar (X, A, B), A=Y, frontchar (C, A, Z), find (B, Y, C);
% X-входная строка, Y-искомый символ, Z-результат. A-1-я буква строки X, B-остальное
% 1-я буква сравнивается с искомой. Если Тру => в C записывается A+Z, т.е. искомая буква
% добавляется к остальным. Далее B становится вх. строкой, Y остается, C-станет Z.
frontchar (X, A, B), A<>Y, find (B, Y, Z);
% то же, что в предыдущем, но если не Тру (символы разные), то переходим к следующему
% символу - B становится вх. строкой, Y остается, Z остается.
X=»», str_len (Z, Kolvo), write («Kolichestvo simvolovov '», Y, «' =», Kolvo), nl.
% Когда строка закончится - считается кол-во букв в Z (т.е. кол-во совпавших символов),
% сохраняется в Kolvo и выводится на экран.
Goal
write («Enter string»), nl, %запрос строки
readln(St), %ввод строки
write («Enter letter»), nl, %запрос буквы
readln(Ch), %ввод буквы
frontchar (Ch, Char,_), %переход из типа String в Char
find (St, Char, "»). %выполнение программы
3. Задание 3
Написать программу, реализующую авиасправочник. В справочнике содержится следующая информация о каждом рейсе: номер рейса, пункт назначения, цена билета. Реализовать вывод всей информации из справочника, поиск пункта назначения по номеру рейса. Реализовать поиск по пункту назначения с указанием максимально возможной цены билета (должны быть выведены все рейсы, цена билета на которые ниже указанного значения) Для удобства работы реализовать меню с соответствующими пунктами.
Исходный текст:
Domains
X=Integer
Predicates
nondeterm Reis (Integer, String, Integer)
nondeterm All
nondeterm Find(Integer)
nondeterm FindCost (String, Integer)
nondeterm Menu(Integer)
nondeterm Wel
Clauses
Reis (1001, «Sankt-Peterburg», 13000).
Reis (1021, «Sankt-Peterburg», 9700).
Reis (1045, «Sankt-Peterburg», 7000).
Reis (7054, «Moscow», 15500).
Reis (7069, «Moscow», 23000).
Reis (4587, «Moscow», 29300).
Reis (2065, «Brazilia», 45000).
Reis (4544, «Brazilia», 30000).
Reis (2065, «Brazilia», 9300).
Reis (6309, «Parizh», 25000).
Reis (6325, «Parizh», 22600).
Reis (3640, «New-York», 50000).
Reis (3490, «New-York», 38000).
Reis (2890, «Dominikana», 63000).
Reis (9834, «Dominikana», 53800).
Reis (5287, «Kuba», 45300).
Reis (5493, «Kuba», 29500).
Reis (2538, «Kanari», 52000).
Reis (1035, «London», 28000).
Reis (8432, «Berlin», 19000).
Reis (7830, «Dubai», 48000).
Reis (3590, «Samara», 6000).
Reis (4687, «Ispania», 32000).
Reis (4632, «Ispania», 25900).
Reis (2895, «Kabul», 16900).
Reis (4386, «GOA», 21000).
Reis (5892, «Stambul», 15000).
Reis (2837, «Perm», 5000).
Reis (4082, «Pskov», 7400).
Reis (6238, «Ostrov Ratmanova», 70000).
Reis (2970, «Karibskie ostrova», 57500).
Reis (2909, «Karibskie ostrova», 42300).
Reis (5693, «Krim», 9800).
Reis (3250, «Fidzhi», 52000).
All: - Reis (No, Dest, Cost), write («No:», No,». Destination:»,
Dest,». Cost:», Cost,».»), nl, fail. %фэйл для цикла
All: - readchar(_), nl, Wel. % Вывод всего списка
%для удачного завершения программы (для цикла)
Find(Number): - Reis (No, Dest,_), Number=No, write («No:», No,». Destination:», Dest,».»), nl, fail.
Find(_): - nl, write («Bolshe net dannih po dannomu zaprosu»),
readchar(_), nl, Wel. %Вывод номера и назначения по введенному номеру
FindCost (Destination, CostMax): - Reis (No, Dest, Cost), Destination=Dest, Cost<=CostMax,
write («No:», No,». Cost:», Cost,». Destination:», Dest,».»), nl, fail.
FindCost(_,_): - nl, write («Bolshe net dannih po dannomu zaprosu»),
readchar(_), nl, Wel. %Вывод номера цены и назначения по введенному назначению с указанием макс цены
Menu(X): - X=1, All, fail.
Menu(X): - X=2, write («Vvedite No reisa:»), readint(Number), Find(Number), fail.
Menu(X): - X=3, write («Vvedite Punkt Naznacheniia:»), nl, readln(Destination),
write («Vvedite maximalnuiu summu:»), nl, readint(CostMax), FindCost (Destination, CostMax), fail.
Menu(X): - X=4, write («Goodbye!!!»), exit.
Menu(X): - X>4, write («Ne verno, poprobuite eshe raz!»), readchar(_), nl, Wel.
%Менюшка, отвечает на любые числа, зацикливает. Выход черех 4.
Wel: - write («Dobro Pozhalovat v aviaspravochnik»), nl, readchar(_),
write («menu:»), nl,
write («1 - Vivod vsei informacii»), nl,
write («2 - Poisk po nomeru reisa»), nl,
write («3 - Poisk s maximalnoi summoi»), nl,
write («4 - Vihod»), nl,
write («Viberite punkt menu:»),
readint(X), Menu(X).
%Вводный экран с описанием меню.
Goal
Wel.
В данном задании я познакомился с поиском с возвратом и рекурсией. В первом задании я использовал команду frontchar (string, char, string) для подсчета количества заданных букв, рекурсия организовалась с помощью рекурсии, т.е. процедура вызывала сама себя. Во второй задаче для поддержки поиска с возвратом я использовал предикат fail - программа после поиска возвращалась в меню.
4. Задание 4
Цель - решение логических задач на соответствие.
Три друга разной национальности на соревнованиях заняли 1, 2, 3 места. Зовут друзей по-разному и занимаются они разными видами спорта. Майкл предпочитает баскетбол и играет лучше американца. Англичанин Саймон играет лучше теннисиста. Игрок в крикет занял 1-е место. Кто является австралийцем? Какое место занял Сигурд?
Исходный текст:
Domains
man=m (name, nationality, sport)
men=man*
name, nationality, sport=string
A=reference man*
B=reference man*
C=reference man*
Predicates
name (man, name)
nationality (man, nationality)
sport (man, sport)
first (men, man)
nondeterm better (man, man, men)
nondeterm friend (man, men)
nondeterm reshenie
Clauses
better (A, B, [A, B,_]).
better (B, C, [_, B, C]).
better (A, C, [A,_, C]).
%better (A,_, [_,_,_]).
%better (X,_,): - better (X,_, Y).
name (m(N,_,_), N).
nationality (m(_, Nt,_), Nt).
sport (m(_,_, S), S).
first([X|_], X).
reshenie:-
better (X1k1, X2k1, Sportsmen), name (X1k1, «Michael»), sport (X1k1, «Basketball»), nationality (X2k1, «American»),
better (X1k2, X2k2, Sportsmen), name (X1k2, «Saimon»), nationality (X1k2, «English»), sport (X2k2, «Tennis»),
first (Sportsmen, X1k3), sport (X1k3, «Cricket»),
friend (X1k4, Sportsmen), name (X1k4, «Sigurd»),
friend (X1k5, Sportsmen), nationality (X1k5, «Australian»),
Sportsmen=[m (N1, Nt1, S1), m (N2, Nt2, S2), m (N3, Nt3, S3)],
write («1-st place is», N1,». He is», Nt1,». His sport is:», S1), nl,
write («2-nd place is», N2,». He is», Nt2,». His sport is:», S2), nl,
write («3-rd place is», N3,». He is», Nt3,». His sport is:», S3), nl.
friend (X, [X|_]).
friend (X, [_|Y]): - friend (X, Y).
Goal
reshenie.
Ответ
1-е место |
Саймон |
Англичанин |
Крикет |
|
2-е место |
Майкл |
Австралиец |
Баскетбол |
|
3-е место |
Сигурд |
Американец |
Теннис |
В данной задаче я научился решать логические задачи на соответствие (задачи Эйнштейна). После ввода всех известных условий и соответствий, программа производит анализ и получает недостающие соответствия - результат.
5. Задание 5
Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т.п. В качестве примера можно использовать следующую программу на естественном языке
Предметная область: Выбор и покупка сноуборда.
Исходный текст:
database
xpositive(symbol)
xnegative(symbol)
sb(integer)
predicates
nondeterm do_expert_job
nondeterm do_consulting
ask(symbol)
koordinat(symbol)
torg(symbol)
dostavka(symbol)
money(integer)
sdacha(symbol)
check(string)
nondeterm snowboard(symbol)
type(symbol)
rost(symbol)
okras(symbol)
situation(symbol)
%it_is(symbol)
positive(symbol)
negative(symbol)
remember (symbol, symbol)
clear_facts
goal
do_expert_job.
clauses
/* Систесма пользовательского интерфейса */
do_expert_job:-
nl, write(» * * * * * * * * * * * * * * * * * * * * *»),
nl, write (» Добро Пожаловать!»), nl, nl,
nl, write (» Экспертная Система»), nl, nl,
nl, write (» Покупка Сноуборда»),
nl, write (» Выполнил Глухов Александр =)»),
nl, write (» Из АСОИ - 538»),
nl, write(» * * * * * * * * * * * * * * * * * * * * * *»),
readchar(_),
nl, nl, do_consulting, nl, write («Конец.»), readchar(_), nl.
do_consulting: - koordinat(X1), situation(X1), readchar(_),
nl, X1= «Zashel»,
torg(X2), situation(X2), readchar(_),
nl, X2= «Torguet»,
dostavka(X3), situation(X3), readchar(_),
nl, X3= «Dostavka est»,
snowboard(X4), situation(X4), readchar(_),
nl, X4<> «Net»,
write (»: Сколько он стоит?»), nl, readint(A),
write (»: Сколько у вас денег?»), nl, readint(B), C=B-A,
asserta (sb(C)), money(C), readchar(_), nl,
sdacha(X5), situation(X5), readchar(_),
nl, X5<> «Sdachi net»,
write («Вот и отлично»), readchar(_), nl,
write («Покупатель купил сноуборд '», X4, «' за», A,» рублей и ушел!»),
readchar(_);
write («Покупатель ушел из магазина ничего не купив»), readchar(_),!.
do_consulting: - nl, write («Sorry!»),
clear_facts.
ask(X): - write (»:», X, "? «), readln(Reply), check(Reply),
remember (X, Reply).
/* Механизм вывода */
positive(X): - xpositive(X),!.
positive(X): - not (negative(X)),!, ask(X).
negative(X): - xnegative(X),!.
remember (X, да): - asserta (xpositive(X)).
remember (X, нет): - asserta (xnegative(X)), fail.
clear_facts: - retract (xpositive(_)), fail.
clear_facts: - retract (xnegative(_)), fail.
/* Продукционные правила */
% Зашел в магазин или нет
koordinat («Zashel»):-
positive («Покупатель зашел в магазин»),!.
koordinat («Ne zashel»):-
negative («Покупатель зашел в магазин»),!.
%Торгует ли сноубордами
torg («Torguet»):-
positive («Сноуборды есть в продаже»),
koordinat («Zashel»),!.
torg («Ne torguet»):-
negative («Сноуборды есть в продаже»),
koordinat («Zashel»),!.
%Есть ли доставка
dostavka («Dostavka est»):-
positive («Имеется доставка»),
torg («Torguet»),!.
dostavka («Dostavki net»):-
negative («Имеется доставка»),
torg («Torguet»),!.
money(C): - C>0, write («Ваша сдача:», C),!;
C=0, write («Спасибо, что без сдачи»),!;
C<0, write («К сожалению, у вас недостаточно денег»),!.
sdacha («Sdacha ne nuzhna»):-
retract (sb(C)), C=0,!.
sdacha («Sdacha est»):-
positive («У продавца есть сдача»),!.
sdacha («Sdachi net»):-
negative («У продавца нет сдачи»),!.
check(R): - R= «АлександрЧемпион», nl, write («АлександрЛучший»), readchar(_), nl,!.
check(R): - R= «да»,!.
check(R): - R= «нет»,!.
%Описание сноубордов
%Фристайловые
snowboard (» FreeStyleProS»):-
type («FreeStyle»),
rost («S»),
okras («Graf»),!.
snowboard (» FreeStyleProM»):-
type («FreeStyle»),
rost («M»),
okras («Graf»),!.
snowboard (» FreeStyleProL»):-
type («FreeStyle»),
rost («L»),
okras («Graf»),!.
snowboard (» FreeStyleHighJumpS»):-
type («FreeStyle»),
rost («S»),
okras («Ris»),!.
snowboard (» FreeStyleHighJumpL»):-
type («FreeStyle»),
rost («L»),
okras («Ris»),!.
snowboard (» FreeStyleUpS»):-
type («FreeStyle»),
rost («S»),
okras («Ton»),!.
snowboard (» FreeStyleUpM»):-
type («FreeStyle»),
rost («M»),
okras («Ton»),!.
%Фрирайдовые
snowboard (» SnowProXtremeS»):-
type («FreeRide»),
rost («S»),
okras («Graf»),!.
snowboard (» SnowProXtremeM»):-
type («FreeRide»),
rost («M»),
okras («Graf»),!.
snowboard (» SnowProXtremeL»):-
type («FreeRide»),
rost («L»),
okras («Graf»),!.
snowboard (» FreeRideMountainS»):-
type («FreeRide»),
rost («S»),
okras («Ris»),!.
snowboard (» FreeRideMountainM»):-
type («FreeRide»),
rost («M»),
okras («Ris»),!.
snowboard (» FreeFlyM»):-
type («FreeRide»),
rost («M»),
okras («Ton»),!.
snowboard (» FreeFlyL»):-
type («FreeRide»),
rost («L»),
okras («Ton»),!.
%Горные
snowboard (» SpeedWayXtreemS»):-
type («Alpin»),
rost («S»),
okras («Graf»),!.
snowboard (» SpeedWayXtreemM»):-
type («Alpin»),
rost («M»),
okras («Graf»),!.
snowboard (» SpeedWayXtreemL»):-
type («Alpin»),
rost («L»),
okras («Graf»),!.
snowboard (» IceMountainKingM»):-
type («Alpin»),
rost («M»),
okras («Ris»),!.
snowboard (» IceMountainKingL»):-
type («Alpin»),
rost («L»),
okras («Ris»),!.
snowboard (» FastEverestS»):-
type («Alpin»),
rost («S»),
okras («Ton»),!.
snowboard (» FastEverestL»):-
type («Alpin»),
rost («L»),
okras («Ton»),!.
nowboard («Net»).
type («FreeStyle»):-
positive («Тип доски - Free Style (для трюков)»),!.
type («FreeRide»):-
positive («Тип доски - Free Ride (универсальные)»),!.
type («Alpin»):-
positive («Тип доски - Alpin (высокогорные)»),!.
rost («S»):-
positive («ростовой диапазон 120 - 145 см.»),!.
rost («M»):-
positive («ростовой диапазон 145 - 180 sm.»),!.
rost («L»):-
positive («ростовой диапазон 180 - 210 sm.»),!.
okras («Graf»):-
positive («окраска - граффити»),!.
okras («Ris»):-
positive («окраска - рисунок»),!.
okras («Ton»):-
positive («окраска - однотонный»),!.
situation(X): - X= «Ne zashel», write («Покупатель передумал»),!.
situation(X): - X= «Zashel», write («Покупатель внутри»),!.
situation(X): - X= «Torguet», write («В продаже имеются сноуборды»),!.
situation(X): - X= «Ne torguet», write («К сожалению, в продаже нет сноубордов»),!.
situation(X): - X= «Dostavka est», write («Магазин осуществляет доставку»),!.
situation(X): - X= «Dostavki net», write («Магазин не занимается доставкой»),!.
situation(X): - frontchar (X, A,_), frontchar (B, A, "»), B=»», write («Покупатель выбрал сноуборд», X,».»),!.
situation(X): - X= «Net», write («Нет подходящего сноуборда по заданным параметрам»),!.
situation(X): - X= «Sdacha est», write («У продавца есть сдача»),!.
situation(X): - X= «Sdacha ne nuzhna», write («Покупатель дал без сдачи»),!.
situation(X): - X= «Sdachi net», write («У продавца нет сдачи»),!.
/* Конец*/
В данной задаче я построил экспертную систему выбора и покупки сноубордов. Система задает вопросы и принимает ответы «да» и «нет». На основании полученных ответов она предлагает тот или иной вариант развития событий.
prolog предикат программа авиасправочник
Размещено на Allbest.ru
Подобные документы
Основы языка Visual Prolog. Введение в логическое программирование. Особенности составления прологов, синтаксис логики предикатов. Программы на Visual Prolog. Унификация и поиск с возвратом. Использование нескольких значений как единого целого.
лекция [120,5 K], добавлен 28.05.2010Реализация экспертных систем любой сложности, решение любых головоломок и шарад с помощью языка логического программирования Prolog. Основные понятия в языке Prolog. Правила логического вывода и запросы. Процедуры логического вывода и принятия решений.
курсовая работа [19,0 K], добавлен 24.05.2012Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.
реферат [14,3 K], добавлен 15.10.2012Общая характеристика и функциональные возможности языка логического программирования Prolog, а также систем SWI-Prolog и Visual Prolog. Формирование базы знаний относительно определения возможности трудоустройства студента и принципы реализации запросов.
лабораторная работа [1,3 M], добавлен 07.10.2014Классы задач P и NP, их сводимость. Примеры NP-полных и NP-трудных задач. Сущность метода поиска с возвратом. Алгоритмы решения классических задач комбинаторного поиска. Решение задачи о восьми ферзях. Поиск оптимального решения методом ветвей и границ.
презентация [441,5 K], добавлен 19.10.2014Понятие экспертных систем, их классификация, виды и структура. Построение продукционной модели экспертной системы прогнозирования результатов сессии на основании анализа успеваемости, ее реализация в языке логического программирования Visual Prolog.
дипломная работа [1,6 M], добавлен 25.01.2011Знакомство с основами логического программирования на примере языка Prolog. Синтаксис его основных команд. Генеалогическое дерево с использованием предикатов. Хорновская логическая программа. Основные синтаксические объекты: атомы, константы и переменные.
практическая работа [832,7 K], добавлен 20.11.2015История возникновения и развития языка Prolog. Рассмотрение императивных и декларативных языков программирования. Элементы экспертной системы: база знаний, механизм вывода и система пользовательского интерфейса. Описание предикатов и предложений.
дипломная работа [44,0 K], добавлен 11.05.2014Принципы составления простейших логических программ на примере баз знаний "Родственные отношения". Составление ориентированного графа без циклов, решения алгебраических уравнений с легко воспринимаемой внутренней логикой. Алгоритмы и листинги программ.
лабораторная работа [50,5 K], добавлен 24.01.2014Синтаксис логики предикатов. Преобразование унарных предикатов в бинарные. Функции, выполняемые экспертной системой. Правила "если-то" для представления знаний. Разработка оболочки в экспертных системах. Рассуждения, использующие логические формулы.
курс лекций [538,1 K], добавлен 16.06.2012