% =============================================== % Демонстрационные запросы для lab8 task3 % Расширенные семейные отношения % =============================================== % Запуск демонстрации demo :- write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 3: РАСШИРЕННЫЕ СЕМЕЙНЫЕ ОТНОШЕНИЯ ==='), nl, nl, % 1. Демонстрация отношений внучка write('1. ОТНОШЕНИЯ ВНУЧКА'), nl, write('=================='), nl, demo_granddaughter_relationships, nl, % 2. Демонстрация отношений дедушка-внучка write('2. ОТНОШЕНИЯ ДЕДУШКА И ВНУЧКА'), nl, write('============================='), nl, demo_grandfather_granddaughter, nl, % 3. Демонстрация отношений тетя write('3. ОТНОШЕНИЯ ТЕТЯ'), nl, write('================='), nl, demo_aunt_relationships, nl, % 4. Сравнение реализаций write('4. СРАВНЕНИЕ РЕАЛИЗАЦИЙ'), nl, write('======================='), nl, demo_implementation_comparison, nl, % 5. Расширенная информация о семье write('5. РАСШИРЕННАЯ ИНФОРМАЦИЯ О СЕМЬЕ'), nl, write('================================='), nl, demo_extended_family_info, nl, write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 3 ЗАВЕРШЕНА ==='), nl. % ----------------------------------------------- % Демонстрация отношений внучка % ----------------------------------------------- demo_granddaughter_relationships :- write('Проверка отношений внучка:'), nl, % Тесты с использованием grand_da write('?- grand_da(svetlana, ivan). -> '), (grand_da(svetlana, ivan) -> write('true') ; write('false')), nl, write('?- grand_da(victoria, anna). -> '), (grand_da(victoria, anna) -> write('true') ; write('false')), nl, write('?- grand_da(katya, olga). -> '), (grand_da(katya, olga) -> write('true') ; write('false')), nl, write('?- grand_da(dmitry, ivan). -> '), (grand_da(dmitry, ivan) -> write('true') ; write('false')), nl, nl, write('Поиск всех внучек:'), nl, write('grand_dats(ivan):'), nl, grand_dats(ivan), nl, write('grand_dats(anna):'), nl, grand_dats(anna), nl, write('grand_dats(sergey):'), nl, grand_dats(sergey), nl. % ----------------------------------------------- % Демонстрация отношений дедушка-внучка % ----------------------------------------------- demo_grandfather_granddaughter :- write('Проверка двунаправленных отношений дедушка-внучка:'), nl, write('?- grand_pa_and_da(ivan, svetlana). -> '), (grand_pa_and_da(ivan, svetlana) -> write('true') ; write('false')), nl, write('?- grand_pa_and_da(svetlana, ivan). -> '), (grand_pa_and_da(svetlana, ivan) -> write('true') ; write('false')), nl, write('?- grand_pa_and_da(sergey, katya). -> '), (grand_pa_and_da(sergey, katya) -> write('true') ; write('false')), nl, write('?- grand_pa_and_da(katya, sergey). -> '), (grand_pa_and_da(katya, sergey) -> write('true') ; write('false')), nl, write('?- grand_pa_and_da(anna, dmitry). -> '), (grand_pa_and_da(anna, dmitry) -> write('true') ; write('false')), nl, nl, write('Поиск всех пар дедушка-внучка:'), nl, forall( grand_pa_and_da(X, Y), ( (man(X) -> (write(' Дедушка '), write(X), write(' и внучка '), write(Y), nl) ; (write(' Дедушка '), write(Y), write(' и внучка '), write(X), nl) ) ) ), nl. % ----------------------------------------------- % Демонстрация отношений тетя % ----------------------------------------------- demo_aunt_relationships :- write('Проверка отношений тетя:'), nl, write('?- aunt(elena, mikhail). -> '), (aunt(elena, mikhail) -> write('true') ; write('false')), nl, write('?- aunt(maria, dmitry). -> '), (aunt(maria, dmitry) -> write('true') ; write('false')), nl, write('?- aunt(svetlana, andrey). -> '), (aunt(svetlana, andrey) -> write('true') ; write('false')), nl, write('?- aunt(irina, nikolay). -> '), (aunt(irina, nikolay) -> write('true') ; write('false')), nl, write('?- aunt(petr, mikhail). -> '), (aunt(petr, mikhail) -> write('true') ; write('false')), nl, nl, write('Поиск всех теть:'), nl, write('aunts(dmitry):'), nl, aunts(dmitry), nl, write('aunts(mikhail):'), nl, aunts(mikhail), nl, write('aunts(andrey):'), nl, aunts(andrey), nl. % ----------------------------------------------- % Демонстрация сравнения реализаций % ----------------------------------------------- demo_implementation_comparison :- write('Сравнение реализаций через факты и предикаты:'), nl, nl, write('ВНУЧКИ ИВАНА:'), nl, write('Через факты (grand_da_facts):'), nl, findall(X, grand_da_facts(X, ivan), FactsResults), forall(member(GD, FactsResults), (write(' '), write(GD), nl)), write('Через предикаты (grand_da):'), nl, findall(Y, grand_da(Y, ivan), PredicateResults), forall(member(GD2, PredicateResults), (write(' '), write(GD2), nl)), write('Результаты совпадают: '), (sort(FactsResults, S1), sort(PredicateResults, S2), S1 = S2 -> write('ДА') ; write('НЕТ')), nl, nl, write('ТЕТИ ДМИТРИЯ:'), nl, write('Через факты (aunt_facts):'), nl, findall(A, aunt_facts(A, dmitry), AuntFactsResults), forall(member(Aunt1, AuntFactsResults), (write(' '), write(Aunt1), nl)), write('Через предикаты (aunt):'), nl, findall(B, aunt(B, dmitry), AuntPredicateResults), forall(member(Aunt2, AuntPredicateResults), (write(' '), write(Aunt2), nl)), write('Результаты совпадают: '), (sort(AuntFactsResults, S3), sort(AuntPredicateResults, S4), S3 = S4 -> write('ДА') ; write('НЕТ')), nl, nl. % ----------------------------------------------- % Демонстрация расширенной информации о семье % ----------------------------------------------- demo_extended_family_info :- family_info_task3, write('Дополнительные отношения:'), nl, write('========================'), nl, write('Внуки (grandsons):'), nl, write('grandsons(ivan):'), nl, grandsons(ivan), nl, write('Дяди (uncles):'), nl, write('uncles(dmitry):'), nl, uncles(dmitry), nl, write('uncles(andrey):'), nl, uncles(andrey), nl, write('Племянники и племянницы:'), nl, write('Племянники elena:'), nl, forall(nephew(N, elena), (write(' '), write(N), nl)), write('Племянницы elena:'), nl, forall(niece(N, elena), (write(' '), write(N), nl)), nl, show_extended_relationships. % ----------------------------------------------- % Демонстрация генеалогических связей % ----------------------------------------------- demo_genealogical_connections :- write('=== ГЕНЕАЛОГИЧЕСКИЕ СВЯЗИ ==='), nl, write('Полная структура поколений:'), nl, show_family_generations, write('Анализ семейных связей:'), nl, write('======================'), nl, % Показать все виды отношений для конкретного человека Person = dmitry, write('Все отношения для '), write(Person), write(':'), nl, % Родители forall(parent(P, Person), (write(' Родитель: '), write(P), nl)), % Дети forall(parent(Person, C), (write(' Ребенок: '), write(C), nl)), % Братья и сестры forall(brother(B, Person), (write(' Брат: '), write(B), nl)), forall(sister(S, Person), (write(' Сестра: '), write(S), nl)), % Дедушки и бабушки forall(grandparent(GP, Person), ((man(GP) -> write(' Дедушка: '); write(' Бабушка: ')), write(GP), nl)), % Внуки и внучки forall(grandson(GS, Person), (write(' Внук: '), write(GS), nl)), forall(grand_da(GD, Person), (write(' Внучка: '), write(GD), nl)), % Тети и дяди forall(aunt(A, Person), (write(' Тетя: '), write(A), nl)), forall(uncle(U, Person), (write(' Дядя: '), write(U), nl)), nl. % ----------------------------------------------- % Интерактивные примеры % ----------------------------------------------- example_queries_task3 :- write('=== ПРИМЕРЫ ИНТЕРАКТИВНЫХ ЗАПРОСОВ ЗАДАНИЯ 3 ==='), nl, write('Вы можете выполнить следующие запросы в интерактивной сессии:'), nl, nl, write('1. Отношения внучка:'), nl, write(' ?- grand_da(svetlana, ivan). % Проверить, внучка ли Светлана Ивана'), nl, write(' ?- grand_da(X, ivan). % Найти всех внучек Ивана'), nl, write(' ?- grand_dats(ivan). % Показать всех внучек Ивана'), nl, write(' ?- grand_da_facts(X, anna). % Найти внучек Анны через факты'), nl, nl, write('2. Отношения дедушка-внучка:'), nl, write(' ?- grand_pa_and_da(ivan, svetlana). % Проверить связь дедушка-внучка'), nl, write(' ?- grand_pa_and_da(svetlana, ivan). % Обратная проверка'), nl, write(' ?- grand_pa_and_da(X, Y). % Найти все пары дедушка-внучка'), nl, nl, write('3. Отношения тетя:'), nl, write(' ?- aunt(elena, mikhail). % Проверить, тетя ли Елена Михаилу'), nl, write(' ?- aunt(X, dmitry). % Найти всех теть Дмитрия'), nl, write(' ?- aunts(dmitry). % Показать всех теть Дмитрия'), nl, write(' ?- aunt_facts(X, andrey). % Найти теть Андрея через факты'), nl, nl, write('4. Дополнительные отношения:'), nl, write(' ?- grandson(dmitry, ivan). % Проверить, внук ли Дмитрий Ивана'), nl, write(' ?- uncle(petr, mikhail). % Проверить, дядя ли Петр Михаилу'), nl, write(' ?- nephew(dmitry, maria). % Проверить, племянник ли Дмитрий Марии'), nl, write(' ?- niece(svetlana, alex). % Проверить, племянница ли Светлана Алексу'), nl, nl, write('5. Информационные запросы:'), nl, write(' ?- family_info_task3. % Общая информация о семье'), nl, write(' ?- show_extended_relationships. % Показать расширенные отношения'), nl, write(' ?- compare_implementations. % Сравнить реализации'), nl, write(' ?- show_family_generations. % Показать поколения'), nl, nl.