Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_РЛП_4_форм.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
644.61 Кб
Скачать

2.3.Отношения и предикаты

Определение 2.3.1. Прямым произведением множеств A1,…, An (обозначается как A1…An.) в теории множеств называется множество {(a1,…,an): a1, A1,,…,an An}.

Определение 2.3.2. Отношением между множествами A1,…, An называется некоторое множество R A1…An.

Определение 2.3.3. n-арным отношением на множестве A называется некоторое множество R An. (An=AA…A – прямое произведение A на само себя n раз)

Определение 2.3.4. Сечением отношения R A1…An по компоненте i и значению c называется отношение R1={(a1,…, ai-1 ,ai+1 ,.., an): (a1,…, ai-1,c,ai+1 ,.., an)R }.

Пусть М – некоторое множество значений переменных.

Предикат P(x1,…,xn) можно представить в виде функции p: М n→{0,1} от n переменных, которая при заданных аргументах принимает значения в зависимости от истинности полученного высказывания.

Предикат P(x1,…,xn) можно представить в виде отношения на множестве M следующим образом:

P ={(a1,…,an)Mn : высказывание P(a1,…,an) истинно} или

P ={(a1,…,an)Mn : P(a1,…,an)=1}.

3.Пролог- язык РекуРсивно-логического программирования

3.1.Пролог-история возникновения

Название ПРОЛОГ есть сокращение, означающее ПРОграммирование в терминах ЛОГики. Идея использовать логику в качестве языка программирования возникла впервые в начале 70-х годов. Первыми исследователями, разрабатывавшими эту идею, были Роберт Ковальский из Эдинбурга (теоретические аспекты), Маартен ван Эмден из Эдинбурга (экспериментальная демонстрационная система) и Ален Колмероэ из Марселя (реализация). Сегодняшней своей популярности Пролог во многом обязан эффективной реализации этого языка, полученной в Эдинбурге Дэвидом Уорреном в середине 70-х годов (см. [3]).

3.2.Синтаксис языка пролог

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

Опишем синтаксис языка посредством регуляризованных формул Бэкуса-Наура. Фигурные скобки в формуле означают, что конструкция внутри них может повторяться многократно. Квадратные скобки означают, что конструкция внутри них может отсутствовать.

<программа>::={<предложение>.}

Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.

<предложение>::=<голова>[:-<тело>]

<тело>::=< предикат>{,<предикат>}

<голова>::=<предикат>

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

Предложения бывают трех типов: факты, правила и вопросы.

<факт>::=<предикат>

<правило>::=<голова>:-<тело>

<вопрос>::=?-<тело>

Факты - это предложения, имеющие пустое тело. Вопросы имеют только тело. Правила имеют голову и непустое тело.

<предикат>::=<имя>[(<список_параметров>)]

<список_параметров>::=<параметр>{,<параметр>}

<параметр>::=<число> | <текстовая константа> | <переменная> | <структура>

<текстовая константа>::=”<строка_символов>” | <атом>

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

Параметрами предиката могут быть конкретные имена объектов (текстовые константы), числовые константы, переменные, а также структуры. Текстовые константы бывают двух видов: строка произвольных символов в кавычках и строка, начинающаяся со строчной буквы без кавычек. Такая константа называется атомом. переменными в Прологе являются идентификаторы, начинающиеся с заглавной буквы, например, X, Y.

Пример 3.2.1. Конструкции языка Пролог

Предикаты:

родитель(X, анна)

родитель(иван, анна)

родитель(“Иван”, “Анна”)

родитель(X, Y)

сосед(X, Y)

Факты:

родитель(иван, анна).

сосед(иван, федор).

Вопросы:

?- сосед(иван, федор).

?- родитель(иван, анна).

?- родитель(X, Y).

Правила:

отец(X, Y):- родитель(X, Y), мужчина(X).

дед(X, Y):- отец(X, Z), отец(Z, Y).

Структура - это единый объект состоящий из совокупности других объектов, называемых компонентами. Компоненты в свою очередь могут быть также структурами.

<структура>::=<функтор>(<список_компонент>)

<список_компонент >::=< компонента>{,< компонента>}

<компонента>::=<параметр>

< функтор >::=<имя>

Функторы различается двумя параметрами: именем и арностью - т.е. числом компонент. Например, point(X, Y, Z) и point(X, Y) - это разные термы.