- •Введение
- •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. Управление поиском
- •Литература
2. Синтаксис и семантика Пролог-программ
2.1. Объекты данных1
Объекты данных в Прологе могут быть простыми данными и структурами. Простые данные могут быть константами и переменными. Константы могут быть атомами, числами и строками.
Пролог-система распознает тип объекта по его синтаксической форме в тексте программы.
Атомы.
Атом – комбинация букв, цифр и знака подчеркивания, начинающаяся со строчной буквы. Примеры: a, "это_атом", "this_is_atom".
Переменные.
Переменная – комбинация букв, цифр и знака подчеркивания, начинающаяся с прописной буквы. Примеры: V, Это_переменная25.
Структуры.
Структурные объекты (или просто структуры) – это объекты, состоящие из нескольких компонент. Компоненты, в свою очередь, могут быть структурами. Для объединения компонент в структуру используется функтор:
date(17,июнь,1999) % date – функтор.
date(День,июнь,1999), здесь – День – переменная, которая может получить значение (стать связанной переменной) на ком-то этапе вычислений. Синтаксически все объекты данных в Прологе есть термы.
Сопоставление.
Наиболее важная операция над термами – сопоставление. Два терма сопоставимы, если:
- они идентичны,
- переменным в обоих термах можно присвоить в качестве значений объекты таким образом, что после подстновки они станут идентичными.
Например, date(Day,июнь,1999) и date(Day1,июнь,1999) сопоставимы, поскольку переменным Day и Day1 можно присвоить одинаковые значения от 1 до 31. Сопоставление – процесс проверки сопоставимости термов.
2.2. Декларативный смысл Пролог-программ
Дано предложение:
P:-Q,R.
Q и R имеют синтаксис термов.
Возможные способы декларативной интерпретации этого предложения:
P истинно, если Q и R истинны.
Из Q и R следует P.
Два варианта процедурного прочтения:
Чтобы решить задачу P нужно сначала решить подзадачу Q, а затем –
подзадачу R.
Чтобы достичь P, сначала достигни Q, затем достигни R.
Таким образом, различие между декларативным и процедурным прочтениями заключается в том, что последнее не только определяет логические связи между левой и правой (цели) частями предложения, но еще и порядок, в котором эти цели обрабатываются.
Декларативный смысл программы определяет, является ли данная цель истинной и, если да, то при каких значениях переменных это достигается. Конкретизацией предложения называется результат подстановки в него на место каждой переменной некоторого терма. Вариантом предложения C называется такая конкретизация C, при которой каждая переменная заменена на другую переменную.
Например:
читатель(X):- иметь_книгу(X,Y)
Два варианта:
читатель(X1):- иметь_книгу(X1,Y2)
читатель(Beta):- иметь_книгу(Beta,Alpha)
Конкретизации:
читатель(“Колмогоров”):- иметь_книгу(“Колмогоров”,Z)
читатель(“Васильев”):- иметь_книгу(“Васильев”,”Овод”)
В общем случае, вопрос к Пролог-системе есть список целей, разделенных запятыми. Список целей будет истиннным, если все цели в списке истинны при одинаковых конкретизациях переменных. Запятая между целями обозначает конъюнкцию целей. В Прологе возможна и дизъюнкция целей: должна быть истинной, по крайней мере, одна из целей. Дизъюнкция обозначается точкой с запятой (;):
P:-Q;R. %P истинно, если истинно Q или P.
То же самое можно написать в виде двух правил Пролога:
P:-Q.
P:-R.
Запятая связывает цели сильнее (имеет более высокий приоритет), чем точка с запятой. Предложение
P:-Q,R;S,T,U.
понимается как
P:-(Q,R);(S,T,U).
Процедурная семантика определяет, как Пролог-система отвечает на вопросы. Ответить на вопрос – это значит удовлетворить список целей. Процедурная семантика Пролога – процедура вычисления списка целей.