Пример контрольной работы: Программирование баз знаний в среде Visual Prolog.
Цель работы: Создание программной системы, реализующей базу знаний в среде Visial Prolog.
Работа была сдана и зачтена.
Использовать только в качестве примера!
Высылать ее прямо в таком виде категорически не рекомендуется!
Цель работы:
Создание программной системы, реализующей базу знаний в среде Visial Prolog.
Краткое описание предметной области:
Предметная область: Расписание приема врачами в поликлинике.
Данная предметная область содержит полную информацию по приему врачами в поликлинике. Есть такие поля, как фамилия, имя, отчество принимающего врача, его специализация, дни недели и время приема по каждому дню, а также категория врача и условие приема (платное/бесплатное).
Цель создания системы:
Данная система создается для того, чтобы собирать статистику, по какому-либо полю, параметру, а также для получения необходимой информации, для хранения данных по каждому врачу.
Формальное описание предметной области:
Формулировка запросов:
1 2 3 4 |
1. Запрос выводит фамилию врача по специализации (и наоборот). rel1(F,K):- represent(K,_,doctor(F,_,_),_). Пример запроса: rel1(Х,"терапевт"). |
1 2 3 4 5 6 |
Ответ: Х=Галкин Х=Никифорова Х=беляева Х=светикова 4 Solutions |
1 2 3 4 |
2. Запрос увязывает специалиста и условия приема (платное/бесплатное) во времени. rel2(S,D,B,F,O):- represent(S,L,_,_), member(tp(D,B,F,_,O),L). Пример запроса: rel2("хирург",D,B,F,"бесплатно"). |
1 2 3 4 5 6 7 |
Ответ: 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 |
1 2 |
3. Запрос увязывает фамилию врача, место и время приема. rel3(S,D,B,F,K):- represent(_,L,doctor(S,_,_),_), member(tp(D,B,F,K,_),L). |
1 2 |
Пример запроса: rel3("звонков","среда",B,F,K). |
1 2 3 |
Ответ: B=9, F=19, K=216 1 Solution |
1 2 |
4. Запрос увязывает занятость кабинета во времени. rel4(K,D,B,F):- represent(_,L,_,_), member(tp(D,B,F,K,_), L). |
1 2 |
Пример запроса: rel4(206,D,B,F). |
1 2 3 4 5 6 |
Ответ: D=понедельник, B=9, F=19 D=вторник, B=9, F=19 D=среда, B=9, F=13 D=четверг, B=13, F=19 4 Solutions |
1 2 |
5. Запрос увязывает фамилию врача и его категорию. rel5(F,K):- represent(_,_,doctor(F,_,_),K). |
1 2 |
Пример запроса: rel5(F,"вторая"). |
1 2 3 4 5 |
Ответ: F=никифорова F=звонков F=плетт 3 Solutions |
1 2 |
6. Запрос увязывает специалиста, место и время приемаю rel6(S,D,B,F,K):- represent(S,L,_,_), member(tp(D,B,F,K,_),L). |
1 2 |
Пример запроса: rel6(S,"понедельник",B,F,218). |
1 2 3 4 |
Ответ: S=лфк, B=9, F=15 S=массажист, B=15, F=20 2 Solutions |
Листинг программы на языке Visial Prolog:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
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). |