Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив2 / курсач docx283 / Kursach_SII_MOJ

.docx
Скачиваний:
71
Добавлен:
07.08.2013
Размер:
75.61 Кб
Скачать

Уфимский государственный авиационный технический университет

Кафедра АСУ

Курсовая работа

По дисциплине: «Системы искусственного интеллекта»

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

Выполнил: студент гр. АСОИ-538

Глухов А.В.

Проверил: преподаватель

Алыпов Ю.Е.

Уфа 2012

Задание 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.

Цель - Поиск с возвратом и рекурсия.

Задание 1:

Подсчитать, сколько раз встречается некоторая буква в строке. Строка и буква должны вводиться с клавиатуры. Для разделения строки на символы использовать стандартный предикат 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,""). %выполнение программы

Задание 2:

Написать программу, реализующую авиасправочник. В справочнике содержится следующая информация о каждом рейсе: номер рейса, пункт назначения, цена билета. Реализовать вывод всей информации из справочника, поиск пункта назначения по номеру рейса. Реализовать поиск по пункту назначения с указанием максимально возможной цены билета (должны быть выведены все рейсы, цена билета на которые ниже указанного значения) Для удобства работы реализовать меню с соответствующими пунктами.

Исходный текст:

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 – программа после поиска возвращалась в меню.

Задание 3.

Цель - решение логических задач на соответствие.

Задание:

Три друга разной национальности на соревнованиях заняли 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-е место

Сигурд

Американец

Теннис

Выводы:

В данной задаче я научился решать логические задачи на соответствие (задачи Эйнштейна). После ввода всех известных условий и соответствий, программа производит анализ и получает недостающие соответствия – результат.

Задание 4..

Задание:

Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т.п. В качестве примера можно использовать следующую программу на естественном языке

Предметная область: Выбор и покупка сноуборда.

Исходный текст:

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"),!.

snowboard("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("У продавца нет сдачи"),!.

/* Конец*/

Выводы:

В данной задаче я построил экспертную систему выбора и покупки сноубордов. Система задает вопросы и принимает ответы «да» и «нет». На основании полученных ответов она предлагает тот или иной вариант развития событий.

Соседние файлы в папке курсач docx283