From fbd4bb21c7d15de39273159b2e9364faadb26af4 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 9 Apr 2024 12:13:24 +0400 Subject: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- preptast.pro | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ task1.pro | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 preptast.pro create mode 100644 task1.pro 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. -- cgit v1.2.3