
Задание 6
Реализовать создание и сохранение базы данных.
predicates
person(string, integer).
clauses
person("Анна", 25).
person("Иван", 30).
person("Мария", 22).
person("Петр", 28).
save_database(Filename) :-
open(Filename, write, File),
forall(person(Name, Age), (
write(File, "person('"),
write(File, Name),
write(File, "', "),
write(File, Age),
write(File, ").\n")
)),
close(File).
goal
Filename = "database.pl",
save_database(Filename),
write("База данных сохранена в файле '"), write(Filename), write("'."),
nl.
Реализовать простейший итерационный процесс.
predicates
iterative_process(integer, integer, integer).
clauses
iterative_process(0, Sum, Sum). % Базовый случай: когда N достигло 0, возвращаем текущую сумму
iterative_process(N, CurrentSum, TotalSum) :-
N > 0,
NewN = N - 1,
NewSum = CurrentSum + N,
iterative_process(NewN, NewSum, TotalSum).
goal
N = 10, % Задаем N, для которого хотим посчитать сумму от 1 до N
iterative_process(N, 0, Result),
write("Сумма чисел от 1 до "), write(N), write(" равна "), write(Result),
Реализовать считывание базы данных из файла.
predicates
person(string, integer). % Предикат для базы данных
clauses
% Пустая база данных
person("", 0).
read_database(Filename) :-
open(Filename, read, File),
repeat,
read(File, Clause),
(Clause = end_of_file -> ! ; assert(Clause)),
close(File).
goal
Filename = "database.pl", % Имя файла, из которого нужно считать базу данных
read_database(Filename),
% Пример запроса к базе данных
write("Содержимое базы данных:"),
nl,
person(Name, Age),
write("Имя: "), write(Name), write(", Возраст: "), write(Age),
nl,
fail. % Продолжаем поиск всех фактов в базе данных
Реализовать базу данных о читателях.
predicates
reader(string, integer). % Предикат для базы данных о читателях
clauses
reader("Иван", 30).
reader("Мария", 25).
reader("Петр", 28).
reader("Анна", 22).
goal
write("База данных о читателях:"),
nl,
reader(Name, Age),
write("Имя: "), write(Name), write(", Возраст: "), write(Age),
nl,
fail. % Продолжаем поиск всех фактов в базе данных
Создать базу данных о студентах вашей группы: фамилия, имя, год рождения. Получить список студентов старше 20 лет.
predicates
student(string, string, integer). % Предикат для базы данных о студентах
clauses
student("Иванов", "Иван", 1998).
student("Петрова", "Мария", 2000).
student("Сидоров", "Петр", 1999).
student("Андреева", "Анна", 2001).
students_over_20(FirstName, LastName) :-
student(LastName, FirstName, YearOfBirth),
current_year(CurrentYear),
Age is CurrentYear - YearOfBirth,
Age > 20.
current_year(2023).
goal
write("База данных о студентах:"),
nl,
student(LastName, FirstName, YearOfBirth),
write("Фамилия: "), write(LastName), write(", Имя: "), write(FirstName), write(", Год рождения: "), write(YearOfBirth),
nl,
fail. % Продолжаем поиск всех фактов в базе данных
goal
write("Список студентов старше 20 лет:"),
nl,
students_over_20(FirstName, LastName),
write("Фамилия: "), write(LastName), write(", Имя: "), write(FirstName),
nl,
fail. % Продолжаем поиск всех студентов старше 20 лет