Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / ЛиФП. Лабораторная работа 1

.pdf
Скачиваний:
147
Добавлен:
29.01.2021
Размер:
1.01 Mб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА №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