Готовые отчеты / ЛиФП. Лабораторная работа 1
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №1 по дисциплине «Логическое и функциональное программирование»
Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85
Коваленко Леонид Александрович Преподаватель:
доцент кафедры ПИиВТ Ерофеев Сергей Анатольевич
Санкт-Петербург
2020
Постановка задачи
Подзадача №1. Написать программу на языке Turbo Prolog 2.0, в которой заложены знания в виде соответствий столица-страна и странаконтинент. В виде фактов введены минимум 7 городов, им сопоставлены страны, а странам сопоставлены континенты.
Подзадача №2. Создать базу знаний на языке Turbo Prolog 2.0 по родственным связям, включив дочь, сына, сестру, брата, маму, папу, жену, мужа, бабушку, дедушку, внучку, внука, тетю, дядю, племянницу, племянника, свекровь, свекра, тещу, тестя, сватью, свата, сноху, зятя, свояченицу, шурина, золовку, деверя, невестку.
Схемы знаний Схема знаний для подзадачи №1 представлена на рис. 1.
Рисунок 1 — Соответствия «столица-страна» и «страна-континент» Схемы знаний для подзадачи №2 представлены на рис. 2, 3.
Рисунок 2 — Общая диаграмма разбитых по уровням поколений
2
Рисунок 3 — Общая диаграмма всех родственных связей В более крупном размере данная диаграмма представлена в
приложении 1.
Пояснение диаграммы родственных связей Все дальнейшие определения приведены из Викисловаря.
Дочь — лицо женского пола по отношению к своим родителям. Сын — лицо мужского пола по отношению к своим родителям. Сестра — дочь тех же родителей по отношению к другим их детям. Брат — сын тех же родителей по отношению к другим их детям. Мама (мать) — женщина по отношению к своим детям.
Папа (отец) — мужчина по отношению к своим детям.
Жена — женщина по отношению к мужчине, с которым она состоит в браке.
Муж — мужчина по отношению к женщине, с которой он состоит в браке.
Бабушка — мать отца или матери. Дедушка — отец отца или матери. Внучка — дочь сына или дочери. Внук — сын сына или дочери.
Тётя — сестра отца или матери, либо жена дяди. Дядя — брат отца или матери, либо муж тети. Племянница — дочь брата или сестры. Племянник — сын брата или сестры.
3
Свекровь — мать мужа. Свёкр — отец мужа. Тёща — мать жены. Тесть — отец жены.
Сватья — мать одного из супругов по отношению к родителям другого супруга.
Сват — отец одного из супругов по отношению к родителям другого супруга.
Сноха — жена сына по отношению к его отцу или матери. Зять — муж дочери, сестры, золовки или племянницы. Свояченица — сестра жены.
Шурин — брат жены. Золовка — сестра мужа. Деверь — брат мужа.
Невестка — жена сына или жена брата; замужняя женщина по отношению к родным её мужа: матери, отцу, братьям, сёстрам, жёнам братьев и мужьям сестёр.
Код программы Код решения подзадачи №1 приведен в табл. 1.
Таблица 1 — Код решения подзадачи №1
DOMAINS
capital, country, continent = symbol PREDICATES
capital_of_country(capital, country) country_on_continent(country, continent)
CLAUSES
capital_of_country(buenos_aires, argentina). capital_of_country(ottawa, canada). capital_of_country(beijing, china). capital_of_country(washington, usa). capital_of_country(brazil, brazil). capital_of_country(canberra, australia). capital_of_country(new_delhi, india). country_on_continent(argentina, south_america). country_on_continent(canada, north_america). country_on_continent(china, asia). country_on_continent(usa, north_america). country_on_continent(brazil, south_america). country_on_continent(australia, australia). country_on_continent(india, asia).
Код решения подзадачи №2 приведен в табл. 2.
4
Таблица 2 — Код решения подзадачи №2
DOMAINS
person = symbol
PREDICATES man(person) woman(person)
married(person, person) mother(person, person) father(person, person) parent(person, person) grandparent(person, person) daughter(person, person) son(person, person) sister(person, person) brother(person, person) grandmother(person, person) grandfather(person, person) granddaughter(person, person) grandson(person, person) aunt(person, person) uncle(person, person) nephew(person, person) niece(person, person) svekrov(person, person) svyokr(person, person) tyoshcha(person, person) test(person, person) svatya(person, person) svat(person, person) snoha(person, person) zyat(person, person) svoyachenica(person, person) shurin(person, person) zolovka(person, person) dever(person, person) nevestka(person, person)
CLAUSES woman(irina). woman(lyubov). woman(mariya). woman(olga). woman(elena). woman(zina). man(victor). man(anatolij). man(mihail). man(vladimir). man(aleksej). man(roman).
married(irina, victor). married(olga, vladimir). married(elena, mihail).
married(X, Y) :- man(X), woman(Y), married(Y, X). mother(irina, anatolij).
mother(irina, lyubov). mother(irina, mihail). mother(olga, elena). mother(olga, zina). mother(olga, roman). mother(elena, aleksej). mother(elena, mariya).
father(F, C) :- married(F, M), mother(M, C).
5
parent(P, C) :- mother(P, C); father(P, C). daughter(D, P) :- parent(P, D), woman(D). son(S, P) :- parent(P, S), man(S).
sister(S, X) :- woman(S), mother(M, S), mother(M, X), not(X = S). brother(B, X) :- man(B), mother(M, B), mother(M, X), not(X = B). grandmother(GM, GC) :- mother(GM, P), parent(P, GC). grandfather(GF, GC) :- father(GF, P), parent(P, GC). grandparent(GP, GC) :- parent(GP, P), parent(P, GC). granddaughter(GD, GP) :- woman(GD), grandparent(GP, GD). grandson(GD, GP) :- man(GD), grandparent(GP, GD).
aunt(AT, N) :- sister(AT, P), parent(P, N);
married(AT, U), brother(U, P), parent(P, N). uncle(UE, N) :- brother(UE, P), parent(P, N);
married(UE, A), sister(A, P), parent(P, N). niece(N, AU) :- woman(N), aunt(AU, N); woman(N), uncle(AU, N). nephew(N, AU) :- man(N), aunt(AU, N); man(N), uncle(AU, N). svekrov(SV, SN) :- woman(SN), married(SN, M), mother(SV, M). svyokr(SV, SN) :- woman(SN), married(SN, M), father(SV, M). tyoshcha(T, Z) :- man(Z), married(M, Z), mother(T, M). test(T, Z) :- man(Z), married(M, Z), father(T, M).
svatya(SV, X) :- mother(SV, T), married(T, Y), parent(X, Y). svat(SV, X) :- father(SV, T), married(T, Y), parent(X, Y). snoha(SN, SV) :- woman(SN), married(SN, F), son(F, SV). zyat(Z, X) :- man(Z), married(Z, D), daughter(D, X);
man(Z), married(Z, D), sister(D, X); man(Z), married(Z, D), zolovka(D, X); man(Z), married(Z, D), niece(D, X).
svoyachenica(SV, F) :- sister(SV, M), woman(M), married(M, F). shurin(SH, F) :- brother(SH, M), woman(M), married(M, F). zolovka(ZL, M) :- sister(ZL, F), man(F), married(F, M). dever(D, M) :- brother(D, F), man(F), married(F, M). nevestka(NK, X) :- snoha(NK, X); zolovka(X, NK); dever(X, NK);
married(X, Y), zolovka(Y, NK); married(X, Y), dever(Y, NK).
Тестирование Результат тестирования решения подзадачи №1 приведен в табл. 3.
Таблица 3 — Запросы и решения подзадачи №1
Запрос |
Решения |
|
|
|
X=buenos_aires, Y=argentina |
|
X=ottawa, Y=canada |
|
X=beijing, Y=china |
Goal: capital_of_country(X,Y) |
X=washington, Y=usa |
|
X=brazil, Y=brazil |
|
X=canberra, Y=australia |
|
X=new_delhi, Y=india |
|
|
|
X=argentina, Y=south_america |
|
X=canada, Y=north_america |
|
X=china, Y=asia |
Goal: country_on_continent(X,Y) |
X=usa, Y=north_america |
|
X=brazil, Y=south_america |
|
X=australia, Y=australia |
|
X=india, Y=asia |
|
|
Результат тестирования решения подзадачи №2 приведен в табл. 4.
6
Таблица 4 — Запросы и решения подзадачи №2
Запрос |
Решения |
|
|
|
|
|
X = victor |
|
|
X = anatolij |
|
Goal: man(X) |
X = mihail |
|
X = vladimir |
||
|
||
|
X = aleksej |
|
|
X = roman |
|
|
|
|
|
X = irina |
|
|
X = lyubov |
|
Goal: woman(X) |
X = mariya |
|
X = olga |
||
|
||
|
X = elena |
|
|
X = zina |
|
|
|
|
|
X = irina, Y = victor |
|
|
X = olga, Y = vladimir |
|
Goal: married(X, Y) |
X = elena, Y = mihail |
|
X = victor, Y = irina |
||
|
||
|
X = mihail, Y = elena |
|
|
X = vladimir, Y = olga |
|
|
|
|
|
X = irina, Y = anatolij |
|
|
X = irina, Y = lyubov |
|
|
X = irina, Y = mihail |
|
Goal: mother(X, Y) |
X = olga, Y = elena |
|
X = olga, Y = zina |
||
|
||
|
X = olga, Y = roman |
|
|
X = elena, Y = aleksej |
|
|
X = elena, Y = mariya |
|
|
|
|
|
X = victor, Y = anatolij |
|
|
X = victor, Y = lyubov |
|
|
X = victor, Y = mihail |
|
Goal: father(X, Y) |
X = mihail, Y = aleksej |
|
X = mihail, Y = mariya |
||
|
||
|
X = vladimir, Y = elena |
|
|
X = vladimir, Y = zina |
|
|
X = vladimir, Y = roman |
|
|
|
7
Запрос |
Решения |
|
|
|
|
|
X = irina, Y = anatolij |
|
|
X = irina, Y = lyubov |
|
|
X = irina, Y = mihail |
|
|
X = olga, Y = elena |
|
|
X = olga, Y = zina |
|
|
X = olga, Y = roman |
|
|
X = elena, Y = aleksej |
|
Goal: parent(X, Y) |
X = elena, Y = mariya |
|
X = victor, Y = anatolij |
||
|
||
|
X = victor, Y = lyubov |
|
|
X = victor, Y = mihail |
|
|
X = mihail, Y = aleksej |
|
|
X = mihail, Y = mariya |
|
|
X = vladimir, Y = elena |
|
|
X = vladimir, Y = zina |
|
|
X = vladimir, Y = roman |
|
|
|
|
|
X = irina, Y = aleksej |
|
|
X = irina, Y = mariya |
|
|
X = olga, Y = aleksej |
|
Goal: grandparent(X, Y) |
X = olga, Y = mariya |
|
X = victor, Y = aleksej |
||
|
||
|
X = victor, Y = mariya |
|
|
X = vladimir, Y = aleksej |
|
|
X = vladimir, Y = mariya |
|
|
|
|
|
X = lyubov, Y = irina |
|
|
X = elena, Y = olga |
|
|
X = zina, Y = olga |
|
Goal: daughter(X, Y) |
X = mariya, Y = elena |
|
X = lyubov, Y = victor |
||
|
||
|
X = mariya, Y = mihail |
|
|
X = elena, Y = vladimir |
|
|
X = zina, Y = vladimir |
|
|
|
|
|
X = anatolij, Y = irina |
|
|
X = mihail, Y = irina |
|
|
X = roman, Y = olga |
|
Goal: son(X, Y) |
X = aleksej, Y = elena |
|
X = anatolij, Y = victor |
||
|
||
|
X = mihail, Y = victor |
|
|
X = aleksej, Y = mihail |
|
|
X = roman, Y = vladimir |
|
|
|
|
|
X = lyubov, Y = anatolij |
|
|
X = lyubov, Y = mihail |
|
|
X = mariya, Y = aleksej |
|
Goal: sister(X, Y) |
X = elena, Y = zina |
|
|
X = elena, Y = roman |
|
|
X = zina, Y = elena |
|
|
X = zina, Y = roman |
|
|
|
8
Запрос |
Решения |
|
|
|
|
|
X = anatolij, Y = lyubov |
|
|
X = anatolij, Y = mihail |
|
|
X = mihail, Y = anatolij |
|
Goal: brother(X, Y) |
X = mihail, Y = lyubov |
|
|
X = aleksej, Y = mariya |
|
|
X = roman, Y = elena |
|
|
X = roman, Y = zina |
|
|
|
|
|
X = irina, Y = aleksej |
|
Goal: grandmother(X, Y) |
X = irina, Y = mariya |
|
X = olga, Y = aleksej |
||
|
||
|
X = olga, Y = mariya |
|
|
|
|
|
X = victor, Y = aleksej |
|
Goal: grandfather(X, Y) |
X = victor, Y = mariya |
|
X = vladimir, Y = aleksej |
||
|
||
|
X = vladimir, Y = mariya |
|
|
|
|
|
X = mariya, Y = irina |
|
Goal: granddaughter(X, Y) |
X = mariya, Y = olga |
|
X = mariya, Y = victor |
||
|
||
|
X = mariya, Y = vladimir |
|
|
|
|
|
X = aleksej, Y = irina |
|
Goal: grandson(X, Y) |
X = aleksej, Y = olga |
|
X = aleksej, Y = victor |
||
|
||
|
X = aleksej, Y = vladimir |
|
|
|
|
|
X = lyubov, Y = aleksej |
|
Goal: aunt(X, Y) |
X = lyubov, Y = mariya |
|
X = zina, Y = aleksej |
||
|
||
|
X = zina, Y = mariya |
|
|
|
|
|
X = anatolij, Y = aleksej |
|
Goal: uncle(X, Y) |
X = anatolij, Y = mariya |
|
X = roman, Y = aleksej |
||
|
||
|
X = roman, Y = mariya |
|
|
|
|
|
X = mariya, Y = lyubov |
|
Goal: niece(X, Y) |
X = mariya, Y = zina |
|
X = mariya, Y = anatolij |
||
|
||
|
X = mariya, Y = roman |
|
|
|
|
|
X = aleksej, Y = lyubov |
|
Goal: nephew(X, Y) |
X = aleksej, Y = zina |
|
X = aleksej, Y = anatolij |
||
|
||
|
X = aleksej, Y = roman |
|
|
|
|
Goal: svekrov(X, Y) |
X = irina, Y = elena |
|
|
|
|
Goal: svyokr(X, Y) |
X = victor, Y = elena |
|
|
|
|
Goal: tyoshcha(X, Y) |
X = olga, Y = mihail |
|
|
|
|
Goal: test(X, Y) |
X = vladimir, Y = mihail |
|
|
|
|
|
X = irina, Y = olga |
|
Goal: svatya(X, Y) |
X = irina, Y = vladimir |
|
X = olga, Y = irina |
||
|
||
|
X = olga, Y = victor |
|
|
|
9
Запрос |
Решения |
|
|
|
|
|
X = victor, Y = olga |
|
Goal: svat(X, Y) |
X = victor, Y = vladimir |
|
X = vladimir, Y = irina |
||
|
||
|
X = vladimir, Y = victor |
|
|
|
|
Goal: snoha(X, Y) |
X = elena, Y = irina |
|
X = elena, Y = victor |
||
|
||
|
|
|
|
X = mihail, Y = olga |
|
Goal: zyat(X, Y) |
X = mihail, Y = vladimir |
|
X = mihail, Y = zina |
||
|
||
|
X = mihail, Y = roman |
|
|
|
|
Goal: svoyachenica(X, Y) |
X = zina, Y = mihail |
|
|
|
|
Goal: shurin(X, Y) |
X = roman, Y = mihail |
|
|
|
|
Goal: zolovka(X, Y) |
X = lyubov, Y = elena |
|
|
|
|
Goal: dever(X, Y) |
X = anatolij, Y = elena |
X = elena, Y = irina
Goal: nevestka(X, Y) X = elena, Y = victor X = elena, Y = lyubov
X = elena, Y = anatolij
Тестирование проводилось в Turbo Prolog 2.0 и SWI-Prolog Online. Выводы
В результате выполнения лабораторной работы мы ознакомились со структурой программы на языке Prolog: разделом имен и структур объектов DOMAINS, разделом предикатов PREDICATES и разделом фактов и правил CLAUSES,
— а также реализовали две простые программы для понимания основ логического программирования.
10