- •Практическое занятие 1. Основы логического программирования
- •Основные парадигмы программирования
- •Понятие предиката
- •Унификация - процесс нахождения решения в Прологе
- •Факты и правила в Прологе
- •Пример программы на Прологе
- •Практикум 1-1
- •Практикум 1-2
- •Практикум 1-3
- •Контрольное задание 1 Исходные данные
- •Задание 1. Генеалогическое дерево
- •Задание 2. Представление правил
- •Практикум 2-1
- •Практикум 2-2
- •Стандартные предикаты
- •Ввод и вывод
- •Практикум 2-3
- •Описание арифметических операций
- •Практикум 2-4
- •Самостоятельные задания
- •Практическое занятие 3. Управление процессом решения задачи. Поиск с возвратом. Рекурсия
- •Использование предиката fail
- •Практикум 3-1
- •Использование предиката cut
- •Практикум 3-2
- •Использование рекурсии
- •Практикум 3-3
- •Практикум 3-4
- •Практикум 3-5
- •Практикум 3-6
- •Хвостовая рекурсия
- •[Head|Tail] [Голова|Хвост]
- •Практикум 4-1
- •Встроенный предикат findall
- •Практикум 4-2
- •Вычисление длины списка
- •Практикум 4-3
- •Проверка принадлежности элемента списку
- •Практикум 4-4
- •Слияние двух списков
- •Практикум 4-5
- •Вычисление суммы списка чисел
- •Практикум 4-6
- •Практикум 4-7
- •Удаление элемента из списка
- •Практикум 4-8
- •Получение элемента списка по его номеру
- •Практикум 4-9
- •Запись элементов списка в обратном порядке
- •Поиск максимального (минимального) элемента в списке
- •Практикум 4-10
- •Самостоятельные задания
- •Контрольное задание 2 Исходные данные
- •Практическое занятие 5. Решение логических задач
- •Пример простой логической задачи (два измерения)
- •Практикум 5-1
- •Практикум 5-2
- •Пример задачи (три измерения)
- •Практикум 5-3
- •Пример задачи (альтернативные высказывания)
- •Практикум 5-4
- •Практикум 5-5
- •Самостоятельные задания
- •Контрольное задание 3 Исходные данные
- •Задача 1
- •Задача 2
- •Задача 3
- •Задача 4
- •Задача 5
- •Задача 6
- •Задача 7
- •Задача 8
- •Задача 9
- •Задача 10
- •Задача 11
- •Задача 12
- •Задача 13
- •Задача 14
- •Задача 15
- •Задача 16
- •Задача 17
- •Задача 18
- •Задача 19
- •Задача 20
- •Задачи повышенной сложности
Практикум 2-3
|
Добавьте в программу, представленную на рис.2.2 факты, хранящие пароли пользователей с параметрами (Имя, Пароль). Модифицируйте предикат hello (или создайте новый) - после ввода пользователем имени запросите пароль, если среди фактов будет обнаружено такое сочетание имени и пароля, то сообщить приветствие, а если нет – выдать сообщение: «Пользователь или пароль указан не верно. Повторить попытку (да или нет)? ». Если пользователь ответил «да», то повторить запрос имени и пароль, если «нет», то закончить работу программы.
|
Описание арифметических операций
В языке Пролог используется ряд встроенных функций для вычисления арифметических выражений, некоторые из которых перечислены в табл. 1.
Таблица 1
Обозначение |
Тип операции
|
>,<,=,>=,<=,<> |
Операции сравнения |
+, -, *, / |
Арифметические операции |
X mod Y |
Остаток от деления X на Y |
X div Y |
Частное от деления X на Y |
abs(X) |
Абсолютная величина числа X |
sqrt(X) |
Квадратный корень из X |
sin(X), cos(X), tan(X), arctan(X) |
Тригонометрические функции |
exp(X) |
Возведение в степень X |
log(X) |
Десятичный логарифм (ln) числа X |
ln(X) |
Натуральный логарифм числа X |
random(X)
|
Х – случайное число в диапазоне 0 <= Х < 1 |
Для описания любых операций арифметики можно также использовать собственные предикаты.
Предикаты Пролога не могут появляться в арифметических выражениях. Если требуется, например, переменной R присвоить значение, равное большему из двух выражений X и Y, умноженному на 3, то, используя предикат maximum, следующая запись является не верной:
rez(X,Y,R):- R=maximum(X,Y,Z)*3.
правильно записать так:
rez(X,Y,R):-maximum(X,Y,Z), R=3*Z.
Вычислить длину гипотенузы по длинам катетов прямоугольного треугольника можно с помощью конструкции:
gipotenuza(X,Y,Z):- Z = sqrt(X*X + Y*Y).
На рис. 2.3 представлена программа генерации целого случайного числа в пределах от 0 до 10.
Рис.2.3. Программа генерации случайного числа от 0 до 10
Практикум 2-4
|
Напишите программу «Угадай число» Компьютер загадывает случайное число в диапазоне от 0 до 10. Его нужно угадать. Пример диалога может выглядеть как на рис. 2.4.
|
Рис.2.4. Пример диалога с программой
Самостоятельные задания
Создайте предикат, находящий максимум из четырех целых чисел, определяемых случайным образом в диапазоне от 0 до 100.
Создайте предикат, имеющий пять аргументов и проверяющий, попадает ли точка, чьи координаты заданы первыми двумя параметрами, в круг, центр которого определяют третий и четвертый параметр, а радиус – пятый.
Написать программу вычисления корней квадратного уравнения
ax2+bx+c=0. Коэффициенты a,b,c ввести в диалоге.