summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Guschin <guschin@altlinux.org>2024-04-09 12:13:24 +0400
committerAndrew Guschin <guschin@altlinux.org>2024-04-09 12:38:37 +0400
commitfbd4bb21c7d15de39273159b2e9364faadb26af4 (patch)
treef5229e72984784efea479a1908a73dff67756959
Первое задание
-rw-r--r--preptast.pro64
-rw-r--r--task1.pro59
2 files changed, 123 insertions, 0 deletions
diff --git a/preptast.pro b/preptast.pro
new file mode 100644
index 0000000..999c110
--- /dev/null
+++ b/preptast.pro
@@ -0,0 +1,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.
diff --git a/task1.pro b/task1.pro
new file mode 100644
index 0000000..4a6e9ff
--- /dev/null
+++ b/task1.pro
@@ -0,0 +1,59 @@
+% vim:set syntax=prolog:
+
+?- writeln("Задание 1:").
+
+любит("Таня", "яблоки").
+любит("Сергей", "бананы").
+любит("Андрей", "яблоки").
+любит("Света", "карамель").
+любит("Вова", "карамель").
+любит("Таня", "халва").
+любит("Света", "апельсины").
+любит("Вова", "бананы").
+
+% a) всех, кто любит бананы;
+?- writeln("Любители бананов:").
+?- forall(любит(Кто, "бананы"), (write("- "), writeln(Кто))).
+
+% b) кто любит и халву, и яблоки;
+?- writeln("Любители халвы и яблок:").
+?- forall((любит(Кто, "халва"), любит(Кто, "яблоки")), (write("- "), writeln(Кто))).
+
+% c) что любит Вова;
+?- writeln("Что любит Вова:").
+?- forall(любит("Вова", Что), (write("- "), writeln(Что))).
+
+% d) что любят и Света, и Вова.
+?- writeln("Что любят и Света, и Вова:").
+?- forall((любит("Света", Что), любит("Вова", Что)), (write("- "), writeln(Что))).
+
+
+
+?- writeln("\n\nЗадание 2:").
+
+увлекается("Катя", "теннис").
+увлекается("Виктор", "теннис").
+увлекается("Виктор", "хоккей").
+увлекается("Андрей", "хоккей").
+увлекается("Олег", "хоккей").
+увлекается("Ольга", "теннис").
+увлекается("Катя", "шахматы").
+увлекается("Олег", "шахматы").
+
+% a) каким видом спорта увлекается Андрей;
+?- writeln("Увлечения Андрея:").
+?- forall(увлекается("Андрей", Чем), (write("- "), writeln(Чем))).
+
+% b) всех, кто играет в шахматы;
+?- writeln("Любители шахмат:").
+?- forall(увлекается(Кто, "шахматы"), (write("- "), writeln(Кто))).
+
+% c) каким видом спорта увлекаются и Ольга, и Виктор;
+?- writeln("Спорт, которым увлекаются и Ольга, и Виктор:").
+?- forall((увлекается("Ольга", Чем), увлекается("Виктор", Чем)), (write("- "), writeln(Чем))).
+
+% d) кто увлекается и хоккеем, и шахматами.
+?- writeln("Любители хоккея и шахмат:").
+?- forall((увлекается(Кто, "хоккей"), увлекается(Кто, "шахматы")), (write("- "), writeln(Кто))).
+
+?- halt.