- •Введение
- •1. История Пролога
- •2. Синтаксис и семантика Пролог-программ
- •2.1. Объекты данных1
- •2.2. Декларативный смысл Пролог-программ
- •2.3. Основные определения
- •3. Практическое программирование на Прологе
- •3.1. Структура Пролог-программы
- •3.2. Некоторые предопределенные термы
- •3.3. Свободные и связанные переменные
- •3.4. Внутренняя бд Пролога
- •3.5. Обработка условий и организация циклов в Prolog’е
- •3.5.1. Обработка условия
- •3.5.2. Использование предиката типа repeat
- •3.6. Списки в Прологе
- •3.6.1. Примеры списков
- •3.6.2. Разделение списков на голову и хвост
- •3.6.3. Некоторые полезные программы для работы со списками
- •1. Слияние списков.
- •2. Сортировка списков
- •3.7. Ввод и вывод
- •3.7.1. Файловая система
- •Операции с именами файлов
- •Чтение и запись
- •3.8. Строки и функции работы со строками
- •4. Простенькая экспертная система
- •Игрушечная эс «Кто чем увлекается?»
- •5. Базовые понятия и термины Пролога
- •5.1. Объекты
- •5.2. Внутренние дела Пролога
- •5.3. Что такое шаблоны?
- •5.4. Управление поиском
- •Литература
5.2. Внутренние дела Пролога
Работу пролог-программы можно сравнить с поиском пути на разветвленной дороге (коей является последовательность и семантика утверждений), когда известны все или часть характеристик искомого объекта, но не неизвестно, где следует свернуть. Если у нескольких объектов совпадают характеристики, то будет найден первый объект на этой дороге. Пролог ищет «первую истину».
Бэктрекинг. Основной механизм доказательства теоремы – это бэктрекинг или перебор с возвратами. Возвраты (или откаты происходят в случае неистинности рассматриваемого утверждения (цели, подцели, вспомогательной теоремы) с целью нахождения иного пути (способа доказательства).
Как Пролог убеждается, что цель достигнута?
Основной механизм проверки истинности утверждений заключается в подстановке.
Подстановкой или конкретизацией Θ называется всякое множество присваиваний вида x=t, где x - переменная, а t - терм. Каждой переменной присваевается только одно значение.
Результат подстановки иногда называют подстановочным примером. Если применение подстановки Θ к утверждениям (выражениям) E1,E2 дает один и тот же подстановочный пример, такая подстановка называется унификатором, сам подстановочный процесс - унификацией, а утверждения (предикаты) - унифицируемыми.
5.3. Что такое шаблоны?
Шаблон на поток параметров - шаблон, формирующийся в зависимости от того используются ли параметры в предикатном вызове для ввода данных (т.е. данные известны), либо для вывода данных (т.е. данные неизвестны).
Поточный вариант - если предикат ассоциируется с несколькими различными шаблонами, то для каждого шаблона будет реализована самостоятельная внутренняя программа, относящаяся к данному предикату. Эти различные действия получили название поточных вариантов предиката.
Множественные описания предиката - отдельно взятый предикат может иметь несколько описаний, каждое из которых содержит различные доменовые спецификации для аргумента (аргументов) релевантного отношения.
5.4. Управление поиском
Для того, чтобы найти все возможные решения, а также для управления поиском, существует ограниченный, но мощный набор явных средств.
1. Операторы сравнения и альтернатива (или: or|;).
2. Множественность правил для одного предиката.
3. Встроенные предикаты fail, (cut | !), котороые порождают искусственный откат и отсечение возможных переборов соотвественно.
4. Рекурсия или самовызов предиката.
5. Комбинация отсечения и искусственного отката.
6. Использование предиката типа repeat. repeat:-repeat
Пример
predicates
search2
search
search3
f1(integer,string)
f2(integer,string)
goal
% Если search3 успешен, то write и выполнить search,
% search2, иначе выполнить search, search2.
% используется метод ОО - отсечение и откат.
search3,!,write("Два первых факта удовлетворяют условию"),fail;
search,
search2;
!.
clauses
f1(1,"String1").
f1(2,"String2").
f1(3,"String3").
f1(4,"String4").
f2(1,"String1").
f2(0,"String2").
f2(-5,"String3").
f2(4,"String4").
% Найти первую комбинацию различных фактов, удовлетворяющих
% условию.
% Используется «естественный откат – бэктрегинг» для поиска
% единственного успешного решения.
search:-
f1(X1,S1),
f2(X2,S2),
X2<X1,write(X1," ",S1," ",X2," ",S2),nl.
% Найти все комбинации разных фактов, удовлетворяющих условию
% Используется ОПН - откат после неудачи.
search2:-
f1(X1,S1),
f2(X2,S2),
X2<X1,write(X1," ",S1," ",X2," ",S2),nl,
fail.
search2:-!.
% Удовлетворяют ли условию 1-ые 2 разных факта
% Здесь важно, в каком месте использован откат. Если он был бы
% поставлен после сравнения, то было бы найдено единственное
% решение, как в предикате search.
search3:-
f1(X1,S1),
f2(X2,S2),!,
X2<X1,write(X1," ",S1," ",X2," ",S2),nl.