
ПРО-332б Ихсанова ЛР 2
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение высшего образования
«Уфимский университет науки и технологий»
Кафедра ВМиК
Отчет к лабораторной работе №2
По дисциплине «Логическое программирование»
На тему: «Основные механизмы работы Пролога»
Выполнил:
Студентка группы ПРО-332Б
Ихсанова Э. А.
Проверил:
Старший преподаватель кафедры ВМиК
Шакирзянов А. А.
Уфа 2024
Цель работы:
Ознакомиться с основными механизмами работы Пролога.
Задание:
Реализовать на Прологе задачу описания родственных отношений (см. лаб.раб. № 1) с использованием динамических баз данных. Предусмотреть возможность добавления, изменения и удаления данных, а также последующего сохранения внесенных изменений.
Ход работы
Код программы
% Предикат для добавления родственного отношения
add_parent(Child, Parent) :-
assertz(parent(Child, Parent)), % Добавление факта родительства
format('Added parent-child relationship: ~w is a parent of ~w~n', [Parent, Child]).
% Предикат для удаления родственного отношения
remove_parent(Child, Parent) :-
retract(parent(Child, Parent)), % Удаление факта родительства
format('Removed parent-child relationship: ~w is no longer a parent of ~w~n', [Parent, Child]).
% Предикат для изменения родственного отношения
update_parent(Child, OldParent, NewParent) :-
remove_parent(Child, OldParent), % Удаление старого родственного отношения
add_parent(Child, NewParent), % Добавление нового родственного отношения
format('Updated parent-child relationship: ~w is no longer a parent of ~w, ~w is now a parent of ~w~n', [OldParent, Child, NewParent, Child]).
% Предикат для сохранения родственных отношений в файл
save_fam(FileName) :-
tell(FileName), % Открываем файл для записи
(parent(Child, Parent), format('~w is a parent of ~w.~n', [Parent, Child]), false ; true), % Записываем факты parent/2
told, % Закрываем файл
format('Family relations have been saved to file: ~w~n', [FileName]).
% Примеры использования:
% Добавление родственных отношений
?- add_parent('Андрей', 'Макс'). % 'Андрей' становится родителем 'Макс'
?- add_parent('Маша', 'Андрей'). % 'Маша' становится родителем 'Андрей'
?- add_parent('Арина', 'Андрей'). % 'Арина' становится родителем 'Андрей'
% Удаление родственного отношения
?- remove_parent('Маша', 'Андрей'). % 'Маша' перестает быть родителем 'Андрей'
% Изменение родственного отношения
?- update_parent('Арина', 'Андрей', 'Миша'). % Родительство меняется с 'Андрей' на 'Миша' у 'Арина'
% Сохранение родственных отношений в новый файл
?- save_fam('family_relations.txt'). % Сохранение родственных отношений в файл 'family_relations.txt'
Список основных предикатов
add_parent: Предикат для добавления родственного отношения.
remove_parent: Предикат для удаления родственного отношения.
update_parent: Предикат для изменения родственного отношения.
save_fam: Предикат для сохранения родственных отношений в файл.
Результат работы
Для начала возьмем данные, с которыми программа была разработана. Сначала задаются родственные отношения Андрей, Макс, Маша, Миша и Арина. Далее с родственными отношениями выполняются операции удаления и редактирования.
При таком наборе результат в файле будет:
Рисунок 1 Данные программы
Рисунок 2 Вывод программы
Вывод:
В ходе выполнения лабораторной работы были получены навыки для работы на Прологе с динамическими базами данных и родственными отношениями, а также навыки добавления предикатов для различных задач и последующего сохранения внесенных изменений.