- •Практическое занятие 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
- •Задачи повышенной сложности
Пример программы на Прологе
Существует множество реализации языка Пролог для разных классов вычислительных систем. Для выполнения лабораторных работ используется программный продукт Visual Prolog v.5.2 Personal Edition for Windows.
Программа на Прологе состоит из нескольких секций, каждая из которых идентифицируется ключевым словом и имеет следующую обобщенную структуру:
domains
/* секция объявления доменов */
database
/* секция объявления динамических баз данных */
predicates
/* секция объявления предикатов */
clauses
/* предложения (факты и правила) */
goal
/* подцель_1, подцель_2, и т. д. */
Обязательным в программе является присутствие двух секций с именами predicates и clauses. В первой из них описываются структуры используемых в программе отношений, а во второй эти отношения определяются. Более подробно секции Пролог-программы будут рассмотрены на следующих практических занятиях.
Для набора фактов и правил, рассмотренных выше, один из возможных примеров программы на Прологе будет иметь вид:
Рис. 1.2.Пример программы на Прологе
Пролог-программа может использовать комментарии, которые не влияют на выполнение программы, но могут оказать помощь человеку, читающему программу. Пролог игнорирует произвольное число строк, заключенное между символами /* и */. Все, что находится между % и концом строки, также рассматривается как комментарий.
Практикум 1-1
|
Запустите систему Пролог. Создайте программу «Родственные отношения» в соответствии с рис.1.1., рис.1.2. Проверьте работу программы, ответив на вопросы:
|
Практикум 1-2
|
Добавьте правила, для определения родственных связей
Проверьте работу программы, ответив на вопросы:
|
Практикум 1-3
|
Самостоятельно сформулируйте пять запросов к базе знаний Оформите Отчет по лабораторной работе
|
Контрольное задание 1 Исходные данные
Номер варианта индивидуального задания выбирается по последней цифре номера зачетной книжки (номера студенческого билета).
В индивидуальном задании студенту для описания базы фактов предлагается минимальный набор родственных отношений в соответствии с вариантом:
-
отец/2. мать/2.
сын/2. дочь/2.
сын/3. дочь/3.
родитель/2. мужчина/1.
родитель/2. женщина/1.
ребенок/2. мужчина/1.
ребенок/2. женщина /1.
ребенок/3.
родители/3.
ребенок/3. сын/2.
Значками «/1», «/2», «/3» задается арность отношения или, говоря в терминах предметной области, количество личностей в отношении.
Например:
отношение «мужчина/1» характеризует такой факт как «Виктор является мужчиной» или на Пролог
мужчина (“Виктор”);
отношение «отец/2» характеризует родственное отношение «Виктор отец Андрея» или на Пролог
отец (“Виктор”, “ Aндрей”);
отношение «сын/3» характеризует родственной отношение «Андрей сын Виктора и Аллы» или на Пролог
сын (“Андрей”, “Виктор”, “Алла”);
отношение «родитель/3» характеризует родственной отношение «Виктор и Алла родители Андрея» или на Пролог
родители (“Виктор”, “Алла”, “Андрей”).
Примечание: Указанный в задании минимальный набор фактов родственных отношений может быть расширен дополнительными фактами, но необходимость подобного действия необходимо обосновать.