You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
…
|
||
---|---|---|
.. | ||
task1 | ||
task2 | ||
task3 | ||
task4 | ||
Makefile | ||
README.md |
README.md
Lab 9: Основные предикаты Prolog
Описание
Lab 9 содержит реализацию основных предикатов языка Prolog, включая математические операции, рекурсивные алгоритмы и операции со списками.
Структура
lab9/
├── task1/ # Основные предикаты Prolog
│ ├── predicates.pl # Реализация всех предикатов
│ ├── tests.pl # Автоматические тесты
│ ├── demo.pl # Демонстрация функциональности
│ ├── Dockerfile # Docker контейнер
│ └── Makefile # Команды сборки и запуска
├── Makefile # Главный Makefile
└── README.md # Документация
Task 1: Основные предикаты
Реализованные предикаты:
- max(+X, +Y, +U, -Z) - максимальное из трех чисел
- fact_up(+N, -X) - факториал (рекурсия вверх)
- fact_down(+N, -X) - факториал (рекурсия вниз)
- digit_sum_up(+N, -Sum) - сумма цифр (рекурсия вверх)
- digit_sum_down(+N, -Sum) - сумма цифр (рекурсия вниз)
- square_free(+N) - проверка свободности от квадратов
- read_list(-List) - чтение списка с клавиатуры
- write_list(+List) - вывод списка на экран
- sum_list_down(+List, ?Sum) - сумма списка (рекурсия вниз)
- sum_list_up(+List, ?Sum) - сумма списка (рекурсия вверх)
- remove_by_digit_sum(+List, +TargetSum, -Result) - удаление по сумме цифр
- list_sum_program - интерактивная программа работы со списками
Команды
Из корневой директории lab9:
# Основные команды
make task1 # Запуск task1 (базовая информация)
make demo-task1 # Демонстрация всех предикатов
make test-task1 # Автоматические тесты
make interactive-task1 # Интерактивная сессия
make info-task1 # Подробная информация
# Служебные команды
make build-task1 # Сборка Docker образа
make clean-task1 # Очистка Docker образов
make help # Справка по командам
Из директории task1:
make run # Базовая информация
make demo # Полная демонстрация
make test # Автоматические тесты
make interactive # Интерактивная сессия Prolog
make info # Подробная информация
make trace # Запуск с трассировкой
Примеры использования
Математические операции:
?- max(5, 3, 7, Z). % Z = 7
?- fact_up(5, X). % X = 120
?- fact_down(5, X). % X = 120
?- digit_sum_up(123, Sum). % Sum = 6
?- digit_sum_down(123, Sum). % Sum = 6
Проверка свободности от квадратов:
?- square_free(15). % true
?- square_free(12). % false (делится на 4)
Операции со списками:
?- sum_list_down([1,2,3,4], S). % S = 10
?- sum_list_up([1,2,3,4], S). % S = 10
?- write_list([a,b,c]). % [a, b, c]
?- remove_by_digit_sum([12,21,34,43], 3, R). % R = [34,43]
Интерактивные программы:
?- list_sum_program. % Интерактивная работа со списками
?- interactive_demo. % Интерактивное меню всех функций
Особенности реализации
Рекурсия вверх vs вниз:
- Рекурсия вверх: традиционная рекурсия, вычисления при возврате
- Рекурсия вниз: с аккумулятором, хвостовая рекурсия, эффективнее по памяти
Обработка списков:
- Поддержка пустых списков
- Корректная обработка отрицательных чисел
- Сохранение порядка элементов
Проверка свободности от квадратов:
- Алгоритм проверяет деление на квадраты простых чисел
- Оптимизирован для чисел любого размера
Тестирование
Система включает:
- Автоматические тесты для всех предикатов
- Тесты производительности для сравнения рекурсий
- Стресс-тесты для проверки надежности
- Демонстрационные примеры для обучения
Запуск тестов: make test-task1
Docker
Все задания выполняются в изолированной Docker среде с SWI-Prolog:
- Базовый образ:
swipl:stable
- Автоматическая сборка при запуске
- Поддержка интерактивного режима
Требования
- Docker
- Make
- Терминал с поддержкой UTF-8 (для корректного отображения русского текста)