Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПРО-332б Ихсанова ЛР 2

.docx
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
82.74 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Кафедра ВМиК

Отчет к лабораторной работе №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 Вывод программы

Вывод:

В ходе выполнения лабораторной работы были получены навыки для работы на Прологе с динамическими базами данных и родственными отношениями, а также навыки добавления предикатов для различных задач и последующего сохранения внесенных изменений.