1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
% vim:set syntax=prolog:
% Задание 1.1
родитель("Михаил", "Алексей").
родитель("Евдокия", "Алексей").
родитель("Алексей", "Феодор").
родитель("Алексей", "Софья").
родитель("Алексей", "Иоанн").
родитель("Мария", "Феодор").
родитель("Мария", "Софья").
родитель("Мария", "Иоанн").
родитель("Алексей", "Пётр").
родитель("Наталья", "Пётр").
родитель("Пётр", "Анна").
родитель("Пётр", "Елизавета").
родитель("Екатерина", "Анна").
родитель("Екатерина", "Елизавета").
% Задание 1.2
?- writeln("Родители Петра Первого:").
?- forall(родитель(Кто, "Пётр"), (write("- "), writeln(Кто))).
?- writeln("Дети Петра Первого:").
?- forall(родитель("Пётр", Кто), (write("- "), writeln(Кто))).
% Задание 2.1
женщина("Анна").
женщина("Мария").
женщина("Софья").
женщина("Евдокия").
женщина("Наталья").
женщина("Екатерина").
женщина("Елизавета").
мужчина("Пётр").
мужчина("Михаил").
мужчина("Феодор").
мужчина("Алексей").
% Задание 2.2
мать(Кто, Кого) :- родитель(Кто, Кого), женщина(Кто).
отец(Кто, Кого) :- родитель(Кто, Кого), мужчина(Кто).
сын(Кто, Кого) :- родитель(Кого, Кто), мужчина(Кто).
дочь(Кто, Кого) :- родитель(Кого, Кто), женщина(Кто).
?- writeln("Сыновья Алексея Михайловича:").
?- forall(сын(Кто, "Алексей"), (write("- "), writeln(Кто))).
% Задание 3.3
бабушка(Прародитель, Потомок) :-
родитель(Прародитель, Родитель),
родитель(Родитель, Потомок),
женщина(Прародитель).
общий_родитель(Чел1, Чел2) :- родитель(Кто, Чел1), родитель(Кто, Чел2).
брат(Брат, Кого) :-
общий_родитель(Брат, Кого),
мужчина(Брат),
not(Брат = Кого).
% (мать(Мать, Брат), мать(Мать, Кого); отец(Отец, Брат), отец(Отец, Кого)).
?- forall(брат(Кто, "Софья"), writeln(Кто)).
% ?- halt.
|