Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
17.12.2023
Размер:
58.18 Кб
Скачать

Задание 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 лет