Скачиваний:
11
Добавлен:
01.05.2014
Размер:
103.94 Кб
Скачать

14

Министерство образования Российской Федерации

Нижегородский государственный технический

университет

Кафедра “Компьютерные технологии в проектировании и производстве ”

ПРЕДСТАВЛЕНИЕ ЗНАНИЙ

В ИНФОРМАЦИОННЫХ СИСТЕМАХ

Методические указания к лабораторным работам

Часть 1

Нижний Новгород

2001

Составитель: М.Б.Волков

УДК 681

Представление знаний в информационных системах:Методические указания к лабораторным работам. Часть1/НГТУ, кафедра КТПП; Сост. М.Б.Волков. Н.Новгород, 2001.14с.

Даны рекомендации к выполнению лабораторных работ по дисциплине ”Представление знаний в информационных системах” для студентов специальностей 071900 “Информационные системы”.

Науч. редактор С. Л.Моругин

Подп. 06.09.01 Формат 210148.Печ. л. 0,4

Нижегородский государственный технический университет

Кафедра “Компьютерные технологии в проектировании и

производстве “.

Адрес предприятия:603600, Н.Новгород, ул. Минина 24.

Лабораторная работа №1

1. Цель работы

Ознакомиться с основами декларативной и процедурной части Prolog-программ.

2. Краткие сведения из теории

ПРОЛОГ -

язык логического программирования (ПРОграммирование в ЛОГике), используемый для представления и манипулирования знаниями в системах ИИ.

Логическое программирование -

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

Программа на языке ПРОЛОГ -

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

Утверждение языка ПРОЛОГ -

линейная конструкция из термов, заканчивающаяся точкой.

Терм языка ПРОЛОГ -

это либо константа,либопеременная, либоструктура. Константами являются атомы и числа.

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

Атом языка ПРОЛОГ -

это

  • последовательность букв, цифр и знака "подчеркивание", обязательно начинающаяся со строчнойбуквы;

  • последовательности специальных знаков ":-", "?-", "=", ">" и других.

Переменная языка ПРОЛОГ -

  • последовательность букв, цифр и знака "подчеркивание", обязательно начинающаяся с прописной буквы;

  • знак "подчеркивание".

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

Структура языка ПРОЛОГ -

конструкция из функтора и компонент, имеющая следующий вид

<функтор>(<компонент-1>,<компонент-2>, ... ,<компонент-n>),

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

База фактов в языке ПРОЛОГ -

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

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

При описании фактов переменные не используются.

База правил -

совокупность правил в программе на языке ПРОЛОГ.

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

<структура-0>:-<структура-1>, ... ,<структура-N>.

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

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

В качестве предиктов, состовляющих тело правила, могут выступать

  • предикаты, фигурирующие в базе фактов;

  • предикаты, совпадающие с заголовком других правил;

  • встроенные предикатысистем программирования ПРОЛОГ.

Примеры правил языка ПРОЛОГ:

Встроенный предикат -

предикат, выводимость (согласованность) которого устанавливается непосредственно системой программирования ПРОЛОГ.

Запрос на языке ПРОЛОГ -

утверждение, рассматриваемое в качестве целевого, имеющее следующий вид

<структура-1>, ...,<структура-N>.

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

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

Конкретизация переменной -

связывание переменной языка ПРОЛОГ с конкретным значением.

Конкретизация переменной обеспечивает возврат искомых значений переменных по запросам.

Операция сопоставление

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

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

Декларативная семантика

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

Запятая между целями означает их конъюнкцию. Точка с запятой между целями означает их

дизъюнкцию.

Процедурная семантика

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

Декларативный смысл программ на «чистом Прологе» не зависит от порядка предложений и от порядка целей в предложениях.

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

неудачный порядок может даже привести к бесконечным рекурсивным вызовам.

Имея декларативно правильную программу, можно улучшить ее эффективность путем изменения

порядка предложений и целей при сохранении ее декларативной правильности. Переупорядочивание -один из методов предотвращения за­цикливания.

Выполнение запроса в языке ПРОЛОГ -

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

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

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

Удовлетворив один предикат (подцель) запроса, интерпритатор переходит к соседнему справа, обрабатывая его аналогичным образом.

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

Структура программы на Visual Prolog 5.1

В упрощенном виде:

DOMAINS /*определение типов данных*/

PREDICATES /*определение предикатов*/

CLAUSES /*определение фактов и правил*/

GOAL /*определение целей*/.

В общем случае Visual Prolog имеет следующую базисную структуру:

DOMAINS

/* ...

domain declarations

... */

PREDICATES

/* ...

predicate declarations

... */

CLAUSES

/* ...

clauses (rules and facts)

... */

GOAL

/* ...

subgoal_1,

subgoal_2,

etc. */

Раздел предложений - помещены факты и правила, на основе которыхVisual Prolog пытается удовлетворить цель программы.

Раздел предикатов - объявляются предикаты и домены (области) или (типы) параметров предикатов. Название (имя) Предиката должно начать с символа (предпочтительно нижний регистр), сопровождаем ого последовательностью символов, цифр, и символов подчеркивания, длиной до 250 символов. Нельзя использовать пробел, знак "минус", звездочки, или наклоннную вправо черту в названиях (именах) предиката. Объявления Предиката имеют форму

PREDICATES

predicateName(argument_type1, argument_type2, ..., argument_typeN)

Argument_type1, ..., argument_typeN являются или стандартными доменами (областями) или доменами областями), которые вы объявили в разделе доменов (областей). Объявление домена (области) параметра и при определении типа параметра -аналогично.

Раздел доменов(областей) - объявляются любые нестандартные домены (области), используемые для параметров для ваших предикатов. Домены (области) в Прологе - подобно типам на других языках программирования. Базисные стандартные домены (области) Пролога - char, байт, короткий, ushort, слово, целое число, без знака, длинный, ulong, dword, реальные, строка, и символ; есть и более специализированные стандартные домены (области) приведенные в описании языка. Базисные объявления домена (области) имеют форму

DOMAINS

argument_type1, ..., argument_typeN = <standard domain>

argument_1, ..., argument_N) = <compound domain 1>;

<compound domain 2>;

< ... >;

<compound domain N>;

Составные домены (области) не приведены в описании языка.

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

Если Вы не используете внутреннюю цель, вы введете внешнюю цель в окно Диалога во время выполнения. Со внешним целевым, Прологом ищет все решения, и дисплеи значения, к которым переменные связаны.

Число операндов предиката - число параметров, которые это берет; два предиката могут иметь то же самое имя, но различное число операндов. Вы должны группировать различное число операндов предиката, версии вместе и в предикатах и разделах предложений, но различных числах операндов обработаны как полностью различные предикаты.

Правила имеют форму

HEAD :- <Subgoal1>, <Subgoal2>, ..., <SubgoalN>.

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

:- ("если") в Прологе не был спутан с ЕСЛИ используется на других языках; правило Пролога находится в форме затем / если условного выражения, в то время как УСЛОВНЫЕ ОПЕРАТОРЫ IF на других языках находятся в форме если / затем условного выражения

Типы данных:

String –Последовательность символов, чисел и символов подчеркивания, если первый символ - нижний регистр; или Символьная последовательность, окруженная парой двойных кавычек.

Длина до 255 символов

Примеры строк:

Telephone_number " железнодорожный билет " " Dorid Inc "

Symbol - Последовательность символов. Синтаксис - также как для строк.

Char - Синтаксически, это символ, окруженный одиночными кавычками: например, 'a'

Integer –Целое число в диапазоне от –32768 до 32767

Real- Число с плавающей запятой.

Синтаксически REAL включает знак (+ или -), последовательность цифр DDDDDDD, десятичную точку (.) последовательность цифр DDDDDDD, и экспоненциальную часть (e (+ или -) DDD):

< + | - > DDDDD <. > DDDDDDD < e < + | - > DDD >

Примеры вещественных чисел:

42705 9999 86.72

9111. 929437521e238 79. 83e + 21

Здесь 79. 83e + 21 средства 79.83 x 10 ^ 21, точно как на других языках.

Разрешенный диапазон номера 1 ~) от 10-307 до 1 ~) 10308 (1e-307 к 1e + 308). Значения из интегральных доменов(областей) автоматически преобразованы в вещественные числа когда необходимо.

File– Имя файла

Типы переменных

Примеры

symbol или string

"&&", caitlin, "animal lover", b_l_t

integer

-1, 3, 5, 0

real

3.45, 0.01, -30.5, 123.4e+5

Char

'a', 'b', 'c' '/', '&'

Соседние файлы в папке Представление данных в информационных системах