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
|
% vim:set syntax=prolog:
?- writeln("Задание 2:").
италия("Рим").
италия("Милан").
италия("Неаполь").
италия("Турин").
италия("Палермо").
италия("Генуя").
италия("Болонья").
италия("Флоренция").
италия("Бари").
италия("Катания").
россия("Москва").
россия("Санкт-Петербург").
россия("Новосибирск").
россия("Екатеринбург").
россия("Казань").
россия("Нижний Новгород").
россия("Челябинск").
россия("Красноярск").
россия("Самара").
отдыхает("Саша", "Казань").
отдыхает("Анна", "Самара").
отдыхает("Анна", "Красноярск").
отдыхает("Миша", "Турин").
отдыхает("Коля", "Милан").
отдыхает("Катя", "Палермо").
отдыхает("Виктор", "Москва").
отдыхает("Виктор", "Санкт-Петербург").
отдыхает("Андрей", "Генуя").
отдыхает("Олег", "Болонья").
отдыхает("Ольга", "Флоренция").
отдыхает("Катя", "Неаполь").
отдыхает("Олег", "Красноярск").
женщина("Ольга").
женщина("Катя").
женщина("Саша").
женщина("Анна").
женщина("Катя").
мужчина("Виктор").
мужчина("Виктор").
мужчина("Андрей").
мужчина("Олег").
мужчина("Олег").
мужчина("Миша").
мужчина("Коля").
?- writeln("Список женщин, отдыхающих в России:").
?- forall((отдыхает(Кто, Где), женщина(Кто), россия(Где)), (write("- "), writeln(Кто))).
?- writeln("Список мужчин, отдыхающих в Италии:").
?- forall((отдыхает(Кто, Где), мужчина(Кто), италия(Где)), (write("- "), writeln(Кто))).
?- writeln("\n\nЗадание 4:").
рейс("А505").
рейс("Р420").
рейс("У690").
рейс("М404").
рейс("Т220").
назначение("А505", "Москва").
назначение("Р420", "Саратов").
назначение("У690", "Пермь").
назначение("М404", "Санкт-Петербург").
назначение("Т220", "Грозный").
вылет("А505", 1101).
вылет("Р420", 1253).
вылет("У690", 721).
вылет("М404", 1827).
вылет("Т220", 2205).
дни("А505", "ежедн").
дни("Р420", "чёт").
дни("У690", "нечёт").
дни("М404", "ежедн").
дни("Т220", "чёт").
информация(Номер) :- рейс(Номер)
, назначение(Номер, Город)
, вылет(Номер, Время)
, дни(Номер, Частота)
, write("- Самолёт #"), write(Номер)
, write(", В город: "), write(Город)
, write(", Время: "), write(Время)
, write(", "), writeln(Частота), !.
?- writeln("Информация о всех рейсах:").
?- forall(рейс(Номер), информация(Номер)).
в_город_чёт(Номер, Город) :- назначение(Номер, Город), дни(Номер, "чёт").
?- writeln("Информация о самолётах, вылетающих по чётным дням в Саратов:").
?- forall((рейс(Номер), в_город_чёт(Номер, "Саратов")), информация(Номер)).
ежедн_не_позже(Номер, ВремяФильтр) :- вылет(Номер, Время)
, дни(Номер, "ежедн")
, ВремяФильтр >= Время.
?- writeln("Самолеты, вылетающие ежедневно не позже '12:00':").
?- forall((рейс(Номер), ежедн_не_позже(Номер, 1200)), информация(Номер)).
?- writeln("\n\nЗадание 6:").
перевод(книга, book).
перевод(книга, volume).
перевод(раздел, volume).
перевод(стол, table).
перевод(стол, desk).
перевод(дом, house).
перевод(дом, home).
перевод(собака, dog).
перевод(кошка, cat).
перевод(яблоко, apple).
перевод(вода, water).
перевод(солнце, sun).
перевод(небо, sky).
?- writeln("Содержимое словаря:").
?- forall(перевод(X, Y), (write(X), write(" - "), writeln(Y))).
?- writeln("Возможные переводы слова 'volume':").
?- forall(перевод(X, volume), writeln(X)).
?- writeln("Возможные переводы слова 'стол':").
?- forall(перевод(стол, X), writeln(X)).
?- writeln("\n\nЗадание 8:").
% Факты о учениках и их увлечениях
ученик(анна, 9).
ученик(петр, 9).
ученик(олег, 10).
ученик(ирина, 10).
ученик(светлана, 11).
ученик(дмитрий, 11).
увлекается(анна, кино).
увлекается(петр, музыка).
увлекается(олег, кино).
увлекается(ирина, спорт).
увлекается(светлана, кино).
увлекается(дмитрий, кино).
?- writeln('Увлечения учеников:').
?- forall(
(ученик(Имя, Класс), увлекается(Имя, Увлечение)),
(write(Имя), write(' из класса '), write(Класс), write(' увлекается '), writeln(Увлечение))).
пары_для_кино(Класс) :-
ученик(Имя1, Класс),
увлекается(Имя1, кино),
ученик(Имя2, Класс2),
увлекается(Имя2, кино),
Класс \= Класс2,
write(Имя1), write(' из класса '), write(Класс), write(' и '), write(Имя2), write(' из класса '), write(Класс2), nl,
fail.
?- nl, writeln("Пары для похода в кино:").
?- пары_для_кино(_).
?- halt.
|