Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОЛОГ.doc
Скачиваний:
3
Добавлен:
21.11.2019
Размер:
311.81 Кб
Скачать

5. Базовые понятия и термины Пролога

Следуя известному «алгоритму пастора», который начинал каждую проповедь так: «Сейчас я расскажу Вам о том, о чем я буду говорить, затем я расскажу это, а затем я расскажу о том, о чем я говорил», изложение материала подошло к точке, где я должен сказать о том, о чем я рассказывал.

5.1. Объекты

«Пролог - это язык программирования, предназначенный для обработки символьной нечисловой информации. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними.» [Братко]

Теперь вспомним, из каких «кирпичиков» строятся объекты. Любой класс объектов определяется набором составляющих его подъобъектов и структурой. Элементарные классы объектов не имеют структуры и описываются одним из встроенных типов данных, которые называются еще встроенными доменами.

Домен - имя простого или составного терма (не функтор!), которое, в свою очередь, может замещать этот терм в определении другого сложного терма.

domains

...............................

dom1=functor1(integer,string)

dom2=functor2(symbol,real,dom1)

...............................

Конкретный экземпляр элементарного класса называется атомом. Это - числовые, символьные и строчные константы.

Термы

Все типы данных в Прологе называются термами. Имя терма называется доменом.

Терм может быть простым. Простой терм - это любой класс объектов, определяемый прямо (object=integer) или косвенно доменом стандартного типа:

object2=object;object2=object*

Терм может быть сложным, т.е. состоять из функтора и списка термов, разделенных запятыми и заключенного в круглые скобки

любить(миша,шоколад).

Структура - это другой термин для обозначения сложного терма. Основной характеристикой структуры является ее размерность (или арность) - число термов в списке.

Любая структура определяет некоторое отношение между составляющими ее термами (объектами). В таком случае функтор – это имя отношения. Например, терм (факт)

мяч(форма(сфера),материал(резина),размер(25), цвет([синий,красный]))

определяет конкретный объект класса «мяч». Функтор «мяч» есть имя одноместного отношения «быть объектом».

В рамках программы дается процедурная интерпретация всех отношений. Программисту рекомендуется составлять осмысленные имена всех объектов и функторов, помогающих читателю разобраться в интерпретации и самому программисту не забывать о ней.

Стандартные типы данных являются «аксиоматическими» и не нуждаются в объявлении. Поскольку PDC Prolog является строго типизированным языком, домены необходимы для определения предикатов («процедур» с процедурной точки зрения на Пролог).

Простые домены следует рассматривать как характеристики объектов, выраженные (в конечном итоге) в терминах встроенных типов.

Сложные домены определяют иерархию по вхождению менее сложных объектов в более сложные.

Множество доменов, с помощью которых описываются все объекты отношения, называется системой типов.

Задавая системы типов, мы подготовливаем поле для задания аксиом, которые в Прологе выражаются либо фактами внутренней БД или безусловно верными предикатами (которые также называются фактами, пример: черный(X):-темный(X).

Таким образом, сами логические процедуры могут служить в качестве описаний структур данных.

Пролог-программа

Пролог-программу следует рассматривать как доказательство теоремы, сформулированной в разделе GOAL. Доказательство использует аксиомы, сформулированные как факты Пролога, а также вспомогательные теоремы, сформулированые в виде предложений.

Часто используемый термин цель - это и есть теорема или целевое утверждение. Предложения и отдельные его утверждения рассматриваются как подцели.

Вопрос - это та же теорема или цель. Использование этого термина связано со взглядом на пролог-программу как систему управления Базой Знаний, сами знания в которой представлены фактами.

В случае «Кто у нас большой и темный?» вторая интерпретация конъюнкции большой(X),темный(X) - это теорема о существовании большого и темного объекта X.

Для формулирования целей и подцелей используются переменные.

Переменная - символическое имя, которому может быть сопоставлен определенный домен (определенный в разделе domains или стандартный). Если сравнивать с русским языком, то переменная – это местоимение, которое должно получить конкретное значение. Переменная должна начинаться с буквы в верхнем регистре (или символа подчеркивания)и может содержать только буквы, цифры и знаки подчеркивания. Переменные могут быть связными (имеющими значение), несвязными (свободными, не имеющими значения) и анонимными.

Переменная анонимная - переменная "_", используемая вместо обычной переменной в том случае, когда не важно значение соответствующей ей обычной переменной.

Из переменных, отношений, конкректных экземпляров объектов, используя очень простой синтаксис, конструируются утверждения и предложения Пролога.

Утверждение - одно или несколько отношений, связанных конъюнктивно (отношения, перечисляемые через запятую).

Предложение - утверждение, заканчивающееся точкой, которое может быть фактом и правилом.

Правило - утверждение, истинность которого зависит от выполнения ряда условий.

Заметим, что любое математическое выражение можно назвать отношением, поскольку его можно представить в префиксной записи, и тогда у нас получится обращение к предикату (вызов процедуры).

Правила состоят из двух частей - головы правила и тела правила - соединенных логической связкой «если»: (if|:-)." И синтаксически и семантически левая часть правила – это отношение, что то же самое, что и утверждение. Т.е. правило в целом читается как «отношение имеет место быть, если верны утверждения в правой части» или «утверждение в левой части верно, если верны утверждения в правой части правила.»

Левая часть правила или предложение, состоящее из одного утверждения, называется предикатом.

В этом смысле раздел clauses содержит определения предикатов.

Предикаты должны быть объявлены в разделе predicates.

Предикат может содержать одно или несколько утверждений:

женщина(умная).

женщина(красивая).

женщина(нежная).

женщина(страстная).

женщина(сварливая).

.................

Предикату могут соотвествовать несколько правил. В таком случае говорят о «множественном определении предиката»

Число объектов определяет арность предиката. Предикат женщина имеет арность, равную 1.

Пример предиката нулевой арности:

люблю_женщину:-

женщина(умная),

женщина(красивая),

женщина(нежная),

женщина(страстная).