|
|
% ===============================================
|
|
|
% Демонстрационные запросы для lab8 task2
|
|
|
% Отцовские и семейные отношения
|
|
|
% ===============================================
|
|
|
|
|
|
% Запуск демонстрации
|
|
|
demo :-
|
|
|
write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 2: ОТЦОВСКИЕ И СЕМЕЙНЫЕ ОТНОШЕНИЯ ==='), nl, nl,
|
|
|
|
|
|
% 1. Демонстрация отцовских отношений
|
|
|
write('1. ОТЦОВСКИЕ ОТНОШЕНИЯ'), nl,
|
|
|
write('========================'), nl,
|
|
|
demo_fathers,
|
|
|
nl,
|
|
|
|
|
|
% 2. Демонстрация семейных отношений (жена)
|
|
|
write('2. СЕМЕЙНЫЕ ОТНОШЕНИЯ (ЖЕНА)'), nl,
|
|
|
write('============================'), nl,
|
|
|
demo_wives,
|
|
|
nl,
|
|
|
|
|
|
% 3. Демонстрация дополнительных отношений
|
|
|
write('3. ДОПОЛНИТЕЛЬНЫЕ СЕМЕЙНЫЕ ОТНОШЕНИЯ'), nl,
|
|
|
write('===================================='), nl,
|
|
|
demo_additional,
|
|
|
nl,
|
|
|
|
|
|
% 4. Общая информация о семье
|
|
|
write('4. ИНФОРМАЦИЯ О СЕМЬЕ'), nl,
|
|
|
write('====================='), nl,
|
|
|
demo_family_info,
|
|
|
nl,
|
|
|
|
|
|
write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 2 ЗАВЕРШЕНА ==='), nl.
|
|
|
|
|
|
% Вспомогательные предикаты для демонстрации
|
|
|
|
|
|
demo_fathers :-
|
|
|
write('Проверка отцовства:'), nl,
|
|
|
write('?- father(ivan, petr). -> '),
|
|
|
(father(ivan, petr) -> write('true') ; write('false')), nl,
|
|
|
write('?- father(anna, petr). -> '),
|
|
|
(father(anna, petr) -> write('true') ; write('false')), nl,
|
|
|
write('?- father(petr, dmitry). -> '),
|
|
|
(father(petr, dmitry) -> write('true') ; write('false')), nl,
|
|
|
write('?- father(alex, mikhail). -> '),
|
|
|
(father(alex, mikhail) -> write('true') ; write('false')), nl,
|
|
|
nl,
|
|
|
|
|
|
write('Поиск отца конкретного человека:'), nl,
|
|
|
write('father(petr):'), nl,
|
|
|
father(petr),
|
|
|
write('father(dmitry):'), nl,
|
|
|
father(dmitry),
|
|
|
write('father(mikhail):'), nl,
|
|
|
father(mikhail),
|
|
|
nl,
|
|
|
|
|
|
write('Список всех отцов:'), nl,
|
|
|
fathers.
|
|
|
|
|
|
demo_wives :-
|
|
|
write('Проверка супружеских отношений:'), nl,
|
|
|
write('?- wife(anna, ivan). -> '),
|
|
|
(wife(anna, ivan) -> write('true') ; write('false')), nl,
|
|
|
write('?- wife(elena, petr). -> '),
|
|
|
(wife(elena, petr) -> write('true') ; write('false')), nl,
|
|
|
write('?- wife(maria, alex). -> '),
|
|
|
(wife(maria, alex) -> write('true') ; write('false')), nl,
|
|
|
write('?- wife(ivan, anna). -> '),
|
|
|
(wife(ivan, anna) -> write('true') ; write('false')), nl,
|
|
|
nl,
|
|
|
|
|
|
write('Поиск жены конкретного человека:'), nl,
|
|
|
write('wife(ivan):'), nl,
|
|
|
wife(ivan),
|
|
|
write('wife(petr):'), nl,
|
|
|
wife(petr),
|
|
|
write('wife(alex):'), nl,
|
|
|
wife(alex),
|
|
|
nl,
|
|
|
|
|
|
write('Список всех жен:'), nl,
|
|
|
wives.
|
|
|
|
|
|
demo_additional :-
|
|
|
write('Проверка мужских отношений:'), nl,
|
|
|
write('?- husband(ivan, anna). -> '),
|
|
|
(husband(ivan, anna) -> write('true') ; write('false')), nl,
|
|
|
write('?- husband(petr, elena). -> '),
|
|
|
(husband(petr, elena) -> write('true') ; write('false')), nl,
|
|
|
nl,
|
|
|
|
|
|
write('Поиск мужа:'), nl,
|
|
|
write('husband(anna):'), nl,
|
|
|
husband(anna),
|
|
|
write('husband(elena):'), nl,
|
|
|
husband(elena),
|
|
|
nl,
|
|
|
|
|
|
write('Проверка брачных отношений:'), nl,
|
|
|
write('?- married(anna, ivan). -> '),
|
|
|
(married(anna, ivan) -> write('true') ; write('false')), nl,
|
|
|
write('?- married(ivan, anna). -> '),
|
|
|
(married(ivan, anna) -> write('true') ; write('false')), nl,
|
|
|
nl,
|
|
|
|
|
|
write('Все семейные пары:'), nl,
|
|
|
couples.
|
|
|
|
|
|
demo_family_info :-
|
|
|
family_info_task2,
|
|
|
|
|
|
write('Подробная информация о семьях:'), nl,
|
|
|
write('------------------------------'), nl,
|
|
|
|
|
|
% Показать детей каждой пары
|
|
|
forall(
|
|
|
couple(Wife, Husband),
|
|
|
(
|
|
|
write('Семья '), write(Wife), write(' и '), write(Husband), write(':'), nl,
|
|
|
findall(Child, (parent(Wife, Child), parent(Husband, Child)), Children),
|
|
|
(Children = [] ->
|
|
|
write(' (детей нет)'), nl
|
|
|
;
|
|
|
(write(' Дети: '), write_list(Children), nl)
|
|
|
),
|
|
|
nl
|
|
|
)
|
|
|
).
|
|
|
|
|
|
% Вспомогательный предикат для красивого вывода списка
|
|
|
write_list([]).
|
|
|
write_list([H|T]) :-
|
|
|
write(H),
|
|
|
(T = [] -> true ; (write(', '), write_list(T))).
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Специальные демонстрационные запросы
|
|
|
% -----------------------------------------------
|
|
|
|
|
|
% Показать генеалогическое дерево семьи
|
|
|
show_family_tree :-
|
|
|
write('=== ГЕНЕАЛОГИЧЕСКОЕ ДЕРЕВО ==='), nl,
|
|
|
|
|
|
% Старшее поколение
|
|
|
write('СТАРШЕЕ ПОКОЛЕНИЕ:'), nl,
|
|
|
forall(
|
|
|
(man(X), \+ parent(_, X)),
|
|
|
(write(' Дедушка: '), write(X),
|
|
|
(wife(W, X) -> (write(' (жена: '), write(W), write(')')) ; true),
|
|
|
nl)
|
|
|
),
|
|
|
forall(
|
|
|
(woman(X), \+ parent(_, X), \+ wife(X, _)),
|
|
|
(write(' Бабушка: '), write(X), nl)
|
|
|
),
|
|
|
nl,
|
|
|
|
|
|
% Среднее поколение
|
|
|
write('СРЕДНЕЕ ПОКОЛЕНИЕ:'), nl,
|
|
|
forall(
|
|
|
couple(Wife, Husband),
|
|
|
(write(' Семья: '), write(Wife), write(' и '), write(Husband), nl)
|
|
|
),
|
|
|
nl,
|
|
|
|
|
|
% Младшее поколение
|
|
|
write('МЛАДШЕЕ ПОКОЛЕНИЕ:'), nl,
|
|
|
forall(
|
|
|
(\+ parent(X, _), parent(_, X)),
|
|
|
(
|
|
|
(man(X) -> write(' Сын: '); write(' Дочь: ')),
|
|
|
write(X),
|
|
|
write(' (родители: '),
|
|
|
father(F, X), write(F), write(' и '),
|
|
|
mother(M, X), write(M), write(')'),
|
|
|
nl
|
|
|
)
|
|
|
),
|
|
|
nl.
|
|
|
|
|
|
% Интерактивные примеры
|
|
|
example_queries :-
|
|
|
write('=== ПРИМЕРЫ ИНТЕРАКТИВНЫХ ЗАПРОСОВ ЗАДАНИЯ 2 ==='), nl,
|
|
|
write('Вы можете выполнить следующие запросы в интерактивной сессии:'), nl, nl,
|
|
|
|
|
|
write('1. Отцовские отношения:'), nl,
|
|
|
write(' ?- father(ivan, petr). % Проверить, отец ли иван петра'), nl,
|
|
|
write(' ?- father(X, dmitry). % Найти отца дмитрия'), nl,
|
|
|
write(' ?- father(petr). % Показать отца петра'), nl,
|
|
|
write(' ?- fathers. % Показать всех отцов'), nl, nl,
|
|
|
|
|
|
write('2. Семейные отношения (жена):'), nl,
|
|
|
write(' ?- wife(anna, ivan). % Проверить, жена ли анна ивана'), nl,
|
|
|
write(' ?- wife(X, petr). % Найти жену петра'), nl,
|
|
|
write(' ?- wife(ivan). % Показать жену ивана'), nl,
|
|
|
write(' ?- wives. % Показать всех жен'), nl, nl,
|
|
|
|
|
|
write('3. Дополнительные отношения:'), nl,
|
|
|
write(' ?- husband(ivan, anna). % Проверить, муж ли иван анны'), nl,
|
|
|
write(' ?- married(anna, ivan). % Проверить, женаты ли анна и иван'), nl,
|
|
|
write(' ?- couple(X, Y). % Найти все пары'), nl,
|
|
|
write(' ?- couples. % Показать все пары'), nl, nl,
|
|
|
|
|
|
write('4. Информационные запросы:'), nl,
|
|
|
write(' ?- family_info_task2. % Общая информация о семье'), nl,
|
|
|
write(' ?- show_family_tree. % Показать генеалогическое дерево'), nl,
|
|
|
write(' ?- show_relationships. % Показать все отношения'), nl, nl. |