-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProlog_lab_1.pl
235 lines (199 loc) · 6.45 KB
/
Prolog_lab_1.pl
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
:- initialization(main).
print_list([]) :- write('\n').
print_list([X|Xs]) :- write(X), write(', '), print_list(Xs).
'чоловік'('Дмитро').
'чоловік'('Гамлет').
'чоловік'('Іван').
'чоловік'('Марко').
'чоловік'('Ніл').
'чоловік'('Андрій').
'чоловік'('Федір').
'чоловік'('Роман').
'жінка'('Тетяна').
'жінка'('Валерія').
'жінка'('Ганна').
'жінка'('Федора').
'жінка'('Євгенія').
'жінка'('Діна').
'жінка'('Людмила').
'родитель'('Дмитро', 'Іван').
'родитель'('Дмитро', 'Марко').
'родитель'('Гамлет', 'Ганна').
'родитель'('Гамлет', 'Федора').
'родитель'('Тетяна', 'Іван').
'родитель'('Тетяна', 'Марко').
'родитель'('Валерія', 'Ганна').
'родитель'('Валерія', 'Федора').
'родитель'('Іван', 'Андрій').
'родитель'('Іван', 'Федір').
'родитель'('Ганна', 'Андрій').
'родитель'('Ганна', 'Федір').
'родитель'('Ніл', 'Діна').
'родитель'('Євгенія', 'Діна').
'родитель'('Андрій', 'Людмила').
'родитель'('Андрій', 'Роман').
'родитель'('Діна', 'Людмила').
'родитель'('Діна', 'Роман').
'батько'(X, Y) :-
'родитель'(X, Y),
'чоловік'(X).
'мати'(X, Y) :-
'родитель'(X, Y),
'жінка'(X).
'син'(X, Y) :-
'родитель'(Y, X),
'чоловік'(X).
'дочка'(X, Y) :-
'родитель'(Y, X),
'жінка'(X).
'брат'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Parent, Y),
'чоловік'(X),
X \= Y.
'сестра'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Parent, Y),
'жінка'(X),
X \= Y.
'дядько'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Parent, Sibling),
'родитель'(Sibling, Y),
'чоловік'(X),
X \= Y.
'тітка'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Parent, Sibling),
'родитель'(Sibling, Y),
'жінка'(X),
X \= Sibling.
'дід'(X, Y) :-
'родитель'(X, Child),
'родитель'(Child, Y),
'чоловік'(X).
'баба'(X, Y) :-
'родитель'(X, Child),
'родитель'(Child, Y),
'жінка'(X).
'онук'(X, Y) :-
'родитель'(Y, Parent),
'родитель'(Parent, X),
'чоловік'(X).
'онучка'(X, Y) :-
'родитель'(Y, Parent),
'родитель'(Parent, X),
'жінка'(X).
'небіж'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Grandparent, Parent),
'родитель'(Grandparent, Y),
'чоловік'(X),
Y \= Parent.
'небога'(X, Y) :-
'родитель'(Parent, X),
'родитель'(Grandparent, Parent),
'родитель'(Grandparent, Y),
'жінка'(X),
Y \= Parent.
'одружені'(X, Y) :-
'родитель'(X, Child),
'родитель'(Y, Child),
X \= Y.
'теща'(X, Y) :-
'родитель'(Y, Child),
'родитель'(Wife, Child),
'родитель'(X, Wife),
'жінка'(X),
'чоловік'(Y),
Y \= Wife.
'тесть'(X, Y) :-
'родитель'(Y, Child),
'родитель'(Wife, Child),
'родитель'(X, Wife),
'чоловік'(X),
'чоловік'(Y),
Y \= Wife.
'свекруха'(X, Y) :-
'родитель'(Husband, Child),
'родитель'(Y, Child),
'родитель'(X, Husband),
'жінка'(X),
'жінка'(Y),
Y \= Husband.
'свекор'(X, Y) :-
'родитель'(Husband, Child),
'родитель'(Y, Child),
'родитель'(X, Husband),
'чоловік'(X),
'жінка'(Y),
Y \= Husband.
'зять'(X, Y) :-
'родитель'(X, Child),
'родитель'(Wife, Child),
'родитель'(Y, Wife),
'чоловік'(X),
X \= Wife.
'невістка'(X, Y) :-
'родитель'(X, Child),
'родитель'(Husband, Child),
'родитель'(Y, Husband),
'жінка'(X),
X \= Husband.
'свояк'(X, Y) :-
'родитель'(Y, Child),
'родитель'(Wife, Child),
'родитель'(Wife_parent, Wife),
'родитель'(Wife_parent, Wife_sister),
'родитель'(Wife_sister, Wife_sister_child),
'родитель'(X, Wife_sister_child),
'жінка'(Wife_sister),
'чоловік'(X),
'чоловік'(Y),
Wife \= Wife_sister,
Y \= Wife.
'своячка'(X, Y) :-
'родитель'(Y, Child),
'родитель'(Wife, Child),
'родитель'(Wife_parent, Wife),
'родитель'(Wife_parent, X),
'жінка'(X),
'чоловік'(Y),
X \= Wife,
Y \= Wife.
'дівер'(X, Y) :-
'родитель'(Husband, Child),
'родитель'(Y, Child),
'родитель'(Husband_parent, Husband),
'родитель'(Husband_parent, X),
'чоловік'(X),
'жінка'(Y),
X \= Husband,
Y \= Husband.
'внучатий небіж'(X, Y) :-
'родитель'(Parent, Y),
'родитель'(Parent, Sibling),
'родитель'(Sibling, Sibling_child),
'родитель'(Sibling_child, X),
'чоловік'(X),
Y \= Sibling.
'внучата небога'(X, Y) :-
'родитель'(Parent, Y),
'родитель'(Parent, Sibling),
'родитель'(Sibling, Sibling_child),
'родитель'(Sibling_child, X),
'жінка'(X),
Y \= Sibling.
parent_with_parents(X) :- 'родитель'(_, X), 'родитель'(X, _).
without_children(X) :- 'родитель'(_, X), \+ 'родитель'(X, _).
main :-
findall([X, Y], 'онук'(X, Y), Res),
%maplist(sort, Res),
sort(Res),
print_list(Res).
%findall(X, parent_with_parents(X), Task_1_result),
%sort(Task_1_result),
%print_list(Task_1_result),
%findall(X, without_children(X), Task_2_result),
%sort(Task_2_result),
%print_list(Task_2_result).