- •Министерство образования и науки Российской Федерации
- •Лабораторная работа № 1
- •Данные и знания
- •Синтаксис языка Пролог
- •Семантика языка Пролог
- •Алгоритм работы Пролог-машины.
- •Пример построения базы правил на Пролог
- •Задание на лабораторную работу
- •Лабораторная работа № 2
- •Использование списков в Пролог.
- •Использование накапливающего параметра
- •Управление перебором
- •Задание на лабораторную работу
- •Лабораторная работа № 3
- •Представление задачи в терминах пространства состояний
- •Слепые методы поиска
- •Методы эвристического поиска
- •Поиск оптимального пути
- •3.4 Задание на лабораторную работу
- •Лабораторная работа № 4
- •Основные понятия теории игр
- •Представление игры в матричной форме
- •Представление игры в виде игрового дерева
- •Задание на лабораторную работу
Пример построения базы правил на Пролог
родитель (иван, маша).
родитель (иван, денис).
мужчина (иван).
мужчина (денис).
женщина (маша).
Вопросы системе:
? - родитель (Иван, Маша)
Да
? - родитель (Денис, Маша)
Нет
В вопросах можно использовать переменные.
Кто родитель Маши?
? - родитель (Х, маша)
Х = Иван
Кто дочь Ивана?
? - родитель (иван, Х), женщина (Х)
Х = Маша
Определим отношение ребенок. Используем для его определения переменные:
Если Х – родитель У, то У – ребенок Х.
ребенок (У, Х) :- родитель (Х, У).
Задание на лабораторную работу
Постройте дерево родственных отношений (не менее 4 уровней, не менее 20 человек).
Введите данные о родственных отношениях в программу на Пролог, используя отношения «родитель», «мужчина», «женщина»
Введите в программу правила, описывающие родственные отношения (не менее 10 различных отношений).
Запустите программу через компилятор Пролог
Задайте вопросы системе. Объясните полученные результаты, используя алгоритм работы Пролог-машины.
Лабораторная работа № 2
ИСПОЛЬЗОВАНИЕ СТРУКТУР В ПРОЛОГ
Цель занятия
Ознакомиться с основными структурами представления знаний на языке Пролог.
Порядок выполнения работы
1 Изучить правила использования списков, накапливающего параметра, оператора отсечения
2 Реализовать процедуры работы со списками на языке Пролог
3 Оформить отчет
4 Ответить на контрольные вопросы
Содержание отчета
1 Текст процедур
2 Результаты выполнения процедур
Контрольные вопросы
1 Определение списка. Основные операции над списками
2 Преимущества использования накапливающего параметра
3 Точный смысл оператора отсечения
Использование списков в Пролог.
Список можно описать с помощью функтора (а,(b,c)).
Эквивалентная запись [a,b,c]
Процедуры работы со списками чаще всего определяют рекурсивно, то есть определяют базовые случаи, когда результат выдается сразу, общие случаи будут определять, как свести задачу к более простой.
Пример: Определим рекурсивно процедуру сцепить два списка:
1, 2 – исходные списки; 3 – результирующий список.
Базовый случай – если первый список пуст, то 2й и 3й список одинаковы.
Общий случай – если первый список не пуст, то его голова совпадает с головой 3го списка, а хвост 3го списка будет результатом сцепления хвоста первого списка со вторым списком.
append1([],L,L).
append1([H|T1], L, [H|T]):-
append1(T1, L, T).
?- append1([a,b], [c,d], X).
X = [a,b,c,d]
Пример: принадлежность элемента списку:
1 – объект; 2 – список объектов.
Предикат – истина, если в списке встречается искомый объект.
Базовый случай: если элемент совпадает с головой списка, то предикат – истина.
В общем случае нужно проверить принадлежность элемента хвосту.
elem(X, [X|_]).
elem(X, [_|Xs]):- elem(X, Xs).
?- elem(b, [a,b,c]).
Yes
?- elem(d, [a,b,c]).
No
Пример: удаление элемента из списка:
1 - объект, 2 – исходный список; 3 – результирующий список.
Базовый случай: если элемент совпадает с головой списка, то результат – хвост списка.
Общий случай: результатом будет список, имеющий голову исходного списка и хвост – хвост исходного списка, из которого удален заданный элемент.
delete1(X, [X|Xs], Xs).
delete1(X, [X1|Xs], [X1|L]):-
delete1(X, Xs, L).
?- delete1(b, [a,b,c], X).
X = [a,c]
?- delete1(d, [a,b,c], X).
no