Программирование баз знаний в среде Visual Prolog.

Пример контрольной работы:  Программирование баз знаний в среде Visual Prolog.

Цель работы: Создание программной системы, реализующей базу знаний в среде Visial Prolog.

Работа была сдана и зачтена.

Использовать только в качестве примера!
Высылать ее прямо в таком виде категорически не рекомендуется!

Цель работы:
Создание программной системы, реализующей базу знаний в среде Visial Prolog.

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

Цель создания системы:
Данная система создается для того, чтобы собирать статистику, по какому-либо полю, параметру, а также для получения необходимой информации, для хранения данных по каждому врачу.

Формальное описание предметной области:

Формулировка запросов:

1.    Запрос выводит фамилию врача по специализации (и наоборот).
rel1(F,K):- represent(K,_,doctor(F,_,_),_).
Пример запроса:
rel1(Х,"терапевт").
Ответ:
Х=Галкин
Х=Никифорова
Х=беляева
Х=светикова
4 Solutions
2.    Запрос увязывает специалиста и условия приема (платное/бесплатное) во времени.
rel2(S,D,B,F,O):- represent(S,L,_,_), member(tp(D,B,F,_,O),L).
Пример запроса:
rel2("хирург",D,B,F,"бесплатно").
Ответ:
D=понедельник, B=9, F=19
D=вторник, B=9, F=19
D=четверг, B=13, F=19
D=пятница, B=13, F=19
D=среда, B=9, F=19
5 Solution
3.    Запрос увязывает фамилию врача, место и время приема.
rel3(S,D,B,F,K):- represent(_,L,doctor(S,_,_),_), member(tp(D,B,F,K,_),L).
Пример запроса:
rel3("звонков","среда",B,F,K).
Ответ:
B=9, F=19, K=216
1 Solution
4.    Запрос увязывает занятость кабинета во времени.
rel4(K,D,B,F):- represent(_,L,_,_), member(tp(D,B,F,K,_), L).
Пример запроса:
rel4(206,D,B,F).
Ответ:
D=понедельник, B=9, F=19
D=вторник, B=9, F=19
D=среда, B=9, F=13
D=четверг, B=13, F=19
4 Solutions
5.     Запрос увязывает фамилию врача и его категорию.
rel5(F,K):- represent(_,_,doctor(F,_,_),K).
Пример запроса:
rel5(F,"вторая").
Ответ:
F=никифорова
F=звонков
F=плетт
3 Solutions
6.    Запрос увязывает специалиста, место и время приемаю
rel6(S,D,B,F,K):- represent(S,L,_,_), member(tp(D,B,F,K,_),L).
Пример запроса:
rel6(S,"понедельник",B,F,218).
Ответ:
S=лфк, B=9, F=15
S=массажист, B=15, F=20
2 Solutions

Листинг программы на языке Visial Prolog:

domains
 fname=string
 name=string
 lname=string
 doctor = doctor(fname,name,lname)
 spec = string
 day = string
 begin=integer
 end=integer
 office = integer
 pay = string
 tp = tp(day,begin,end,office,pay)
 schedule = tp*
 category = string

database
 represent(spec,schedule,doctor,category).

predicates
  nondeterm rel1(fname, spec).
  nondeterm rel2(spec,day,begin,end,pay).
  nondeterm member(tp,schedule).
  nondeterm rel3(fname,day,begin,end,office).
  nondeterm rel4(office,day,begin,end).
  nondeterm rel5(fname,category).
  nondeterm rel6(spec,day,begin,end,office).

clauses

represent("лор",[tp("понедельник",9,13,201,"бесплатно"),tp("вторник",9,13,201,"бесплатно"),tp("среда",9,13,201,"платно"),tp("четверг",13,19,201,"бесплатно"),tp("пятница",13,19,201,"бесплатно")], doctor("андреев", "василий", "александрович"),"высшая").
represent("лор",[tp("понедельник",13,19,201,"платно"),tp("вторник",13,19,201,"бесплатно"),tp("среда",13,19,201,"платно"),tp("четверг",9,13,201,"бесплатно"),tp("пятница",9,13,201,"бесплатно")], doctor("варвин", "василий","владимирович"),"первая").
represent("хирург",[tp("понедельник",9,19,202,"бесплатно"),tp("вторник",9,19,202,"бесплатно"),tp("среда",9,19,202,"платно"),tp("четверг",13,19,202,"бесплатно"),tp("пятница",13,19,202,"бесплатно")], doctor("плуталова", "ольга", "михайловна"),"первая").
represent("хирург",[tp("понедельник",13,19,203,"платно"),tp("вторник",13,19,203,"платно"),tp("среда",9,19,203,"бесплатно"),tp("пятница",9,19,203,"платно")],doctor("караева","вероника","сергеевна"),"первая").
represent("гинеколог",[tp("понедельник",9,13,204,"бесплатно"),tp("вторник",9,13,204,"бесплатно"),tp("среда",9,13,204,бесплатно),tp("четверг",13,19,204,"бесплатно"),tp("пятница",13,19,204,"бесплатно")], doctor("берда", "константин", "викторович"),"высшая").
represent("гинеколог",[tp("понедельник",13,19,204,"платно"),tp("вторник",13,19,204,"бесплатно"),tp("среда",13,19,204,"платно"),tp("четверг",9,13,204,"бесплатно"),tp("пятница",9,13,204,"бесплатно")], doctor("баслакова", "елена","дмитриевна"),"первая").
represent("окулист",[tp("вторник",9,13,205,"бесплатно"),tp("среда",9,13,205,"платно"),tp("четверг",13,19,205,"бесплатно"),tp(пятница,13,19,205,"бесплатно")], doctor("попрыжко", "тамара", "мухамедовна"),"первая").
represent("окулист",[tp("понедельник",13,19,205,"платно"),tp("среда",13,19,205,"бесплатно"),tp("четверг",9,13,205,"бесплатно"),tp("пятница",9,13,205,"бесплатно")], doctor("кровопускова", "кристина", "алексеевна"),"первая").
represent("дерматолог",[tp("понедельник",9,19,206,"бесплатно"),tp("вторник",9,19,206,"бесплатно"),tp("среда",9,13,206,"платно"),tp("четверг",13,19,206,"бесплатно")], doctor("никольский", "константин", "федорович"),"высшая").
represent("стоматолог",[tp("понедельник",9,13,207,"платно"),tp("вторник",9,13,207,"бесплатно"),tp("среда",9,13,207,"бесплатно"),tp("четверг",13,19,207,"бесплатно"),tp("пятница",13,19,207,"бесплатно")], doctor("иванов", "олег", "викторович"),"высшая").
represent("стоматолог",[tp("понедельник",13,19,207,"платно"),tp("вторник",13,19,207,"бесплатно"),tp("среда",13,19,207,"платно"),tp("четверг",9,13,207,"бесплатно"),tp("пятница",9,13,207,"бесплатно")], doctor("зверев", "николай", "николаевич"),"первая").
represent("терапевт",[tp("понедельник",9,19,208,"бесплатно"),tp("вторник",9,19,208,"бесплатно"),tp("среда",9,19,208,бесплатно),tp("четверг",9,19,208,"бесплатно")], doctor("галкин", "кирилл", "сергеевич"),"высшая").
represent("терапевт",[tp("понедельник",9,19,209,"платно"),tp("вторник",9,19,209,"бесплатно"),tp("среда",9,19,209,"платно"),tp(пятница,9,19,209,"бесплатно")], doctor("никифорова", "анастасия", "викторовна"),"вторая").
represent("терапевт",[tp("вторник",9,19,210,"бесплатно"),tp("среда",9,19,210,"бесплатно"),tp("четверг",9,19,210,"бесплатно"),tp("пятница",9,19,210,"бесплатно")], doctor("беляева", "дина", "игнатьевна"),"первая").
represent("терапевт",[tp("понедельник",9,19,211,"платно"),tp("среда",9,19,211,"бесплатно"),tp("четверг",9,19,211,"бесплатно"),tp("пятница",9,19,211,"бесплатно")], doctor("светикова", "ирина", "петровна"),"первая").
represent("травматолог",[tp("понедельник",9,13,212,"бесплатно"),tp("вторник",9,13,212,"бесплатно"),tp("среда",9,13,212,бесплатно),tp("четверг",13,19,212,"бесплатно"),tp("пятница",13,19,212,"бесплатно")], doctor("макаревич","александр", "сергеевич"),"высшая").
represent("травматолог",[tp("понедельник",13,19,212,"платно"),tp("вторник",13,19,212,"бесплатно"),tp("среда",13,19,212,"платно"),tp("четверг",9,13,212,"бесплатно"),tp("пятница",9,13,212,"бесплатно")], doctor("иващенко", "станислав", "владимирович"),"первая").
represent("невропатолог",[tp("понедельник",9,19,213,"бесплатно"),tp("вторник",9,19,213,"бесплатно"),tp("среда",9,19,213,бесплатно),tp("четверг",9,19,213,"бесплатно")], doctor("пак", "петр", "евгеньевич"),"высшая").
represent("невропатолог",[tp("вторник",9,19,214,"бесплатно"),tp("среда",9,19,214,"бесплатно"),tp("четверг",9,19,214,"бесплатно"),tp("пятница",9,19,214,"бесплатно")], doctor("полын", "дмитрий", "николаевич"),"первая").
represent("психотерапевт",[tp("понедельник",9,19,215,"бесплатно"),tp("вторник",9,19,215,"бесплатно"),tp("среда",9,19,215,бесплатно),tp("четверг",9,19,215,"бесплатно"),tp("пятница",9,19,215,"платно")], doctor("мазикова", "ирина","алексеевна"),"третья").
represent("ревматолог",[tp("понедельник",9,19,216,"платно"),tp("вторник",9,19,216,"бесплатно"),tp("среда",9,19,216,"платно"),tp(четверг,9,19,216,"бесплатно"),tp("пятница",9,19,216,"бесплатно")], doctor("звонков", "владимир", "анатольевич"),"вторая").
represent("эндокринолог",[tp("вторник",9,19,217,"бесплатно"),tp("среда",9,19,217,"бесплатно"),tp("четверг",9,19,217,"бесплатно"),tp("пятница",9,19,217,"бесплатно")], doctor("бесова", "юлия", "дмитриевна"),"первая").
represent("лфк",[tp("понедельник",9,15,218,"бесплатно"),tp("вторник",13,19,218,"бесплатно"),tp("среда",9,19,218,бесплатно),tp("пятница",9,15,218,"бесплатно")], doctor("никитина", "зоя", "викторовна"),"третья").
represent("массажист",[tp("понедельник",15,20,218,"бесплатно"),tp("вторник",9,13,218,"бесплатно"),tp("четверг",9,19,218,"бесплатно"),tp("пятница",15,19,218,"бесплатно")], doctor("урусова", "валентина", "васильевна"),"первая").
represent("педиатр",[tp("понедельник",9,19,219,"платно"),tp("вторник",9,19,219,"бесплатно"),tp("среда",9,19,219,"платно"),tp(четверг,9,19,219,"бесплатно"),tp("пятница",9,19,219,"бесплатно")], doctor("плетт", "андрей", "петрович"),"вторая").
represent("рентгенолог",[tp("вторник",9,19,220,"бесплатно"),tp("среда",9,19,220,"бесплатно"),tp("четверг",9,19,220,"бесплатно"),tp("пятница",9,19,220,"бесплатно")], doctor("шаньгина", "ксения", "олеговна"),"первая"). 

% Отношение, увязывающее фамилию врача и специализацию, имеет следующий вид:
rel1(F,K):-	represent(K,_,doctor(F,_,_),_).

% Отношение, увязывающее специалиста и условия приема(платное/бесплатное) во времени, имеет следующий вид:
rel2(S,D,B,F,O):-     represent(S,L,_,_), member(tp(D,B,F,_,O),L).

 member(X,[X|_]).
 member(X,[_|Y]):-member(X,Y).

% Отношение, увязывающее фамилию врача, место и время приема, имеет следующий вид:
rel3(S,D,B,F,K):-      represent(_,L,doctor(S,_,_),_), member(tp(D,B,F,K,_),L).

% Отношение, увязывающее занятость кабинета во времени, имеет следующий вид:
rel4(K,D,B,F):-     represent(_,L,_,_), member(tp(D,B,F,K,_), L). 

% Отношение, увязывающее фамилию врача и категорию, имеет следующий вид:
rel5(F,K):-	represent(_,_,doctor(F,_,_),K).

% Отношение, увязывающее специалиста, место и время приема, имеет следующий вид:
rel6(S,D,B,F,K):-      represent(S,L,_,_), member(tp(D,B,F,K,_),L).

goal
 rel1(Х,"терапевт").
 rel2("хирург",D,B,F,"бесплатно").
 rel3("звонков","среда",B,F,K).
 rel4(206,D,B,F).
 rel5(F,"вторая").
 rel6(S,"понедельник",B,F,218).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *