Разработка элементов интеллектуальных систем с использованием логической модели представления знаний

Основы логического программирования на примере 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.