|
|
% ===============================================
|
|
|
% Демонстрационные запросы для 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. |