Турбо-Пролог

Автор работы: Пользователь скрыл имя, 15 Февраля 2013 в 20:44, курсовая работа

Описание работы

Турбо-Пролог (Turbo Prolog) является языком искусственного интеллекта (ИИ). Разработан этот язык компанией Borland International и характеризуется высокой скоростью работы и низкой стоимостью, что делает Турбо-Пролог весьма популярным в широких кругах обладателей персональных компьютеров.

Содержание работы

Содержание 1
Глава 1. Описание языка Турбо-Пролог 2
1.1 Введение 2
1.2 Пакет системы Турбо-Пролог 5
1.2.1 Главное меню системы Турбо-Пролог 6
1.2.2 Запуск на счет программы, написанной на Турбо-Прологе 7
1.2.3 "Добро пожаловать в систему Турбо-Пролог!" 7
1.2.4 Сохранение программного файла 8
1.2.5 Просмотр каталога директории 8
1.2.6 Загрузка и редактирование программного файла 9
1.3 Заключение 10
Глава 2. Основные понятия языка Турбо-Пролог 11
2.1 Ведение 11
2.2 Декларативные и императивные языки 11
2.2.1 Логика предикатов 12
2.2.2 Пролог и логика предикатов 14
2.3 Управление программой 16
2.3.1 Цели программы 16
2.3.3 Результат доказательства цели 17
2.3.4 Связки и другие символы 17
2.3.5 Цели и подцели 18
2.4 Внутренние подпрограммы унификации Турбо-Пролога 18
2.4.1 Представление данных при помощи фактов и правил 19
2.4.2 Обработка правил и фактов во время унификации 19
2.4.3 Откат 22
2.5 Заключение 23
Глава 3. Основы программирования на Турбо-Прологе 24
3.1 Введение 24
3.2 Структура программ Турбо-Пролога 24
3.2.1 Описание доменов и предикатов 26
3.2.2 Правила образования имен в Турбо-Прологе 29
3.3 Предикаты и утверждения 29
3.3.1 Использование внешних и внутренних целей 30
3.3.2 Предикаты и утверждения разных арностей 33
3.3.3 Отрицание 33
3.4 Арифметика в Турбо-Прологе 35
3.5 Заключение 36
4. Примеры программ на языке Турбо-Пролог 37
5. Заключение 41
Список литературы 43

Файлы: 1 файл

KrsPR_02.doc

— 532.00 Кб (Скачать файл)

Бет любит то же самое, что и Мэри

Если известны факты  о том, что любит Мэри, то опять  можно заключить, что Бет любит яблоки.

Вспомним, что логика предикатов рассматривает отношения  между утверждениями и объектами. В предпосылках "Мэри любит яблоки" и "Бет любит нечто, если Мэри любит (это же)" существует отношение между субъектом и объектом. То же самое справедливо и для полученного путем логического вывода факта. "Субъект" - это Мэри или Бет, а "объект" - это яблоки. Отношение между Мэри или Бет и яблоками называется отношением связывания. Объектами в этом отношении являются Мэри, Бет и яблоки.

Если убрать лишние слова, то отношение, соответствующее первому  предложению будет иметь вид:

Объект          Отношение         Объект

Мэри                 любит                 яблоки

Заметьте, что слова, обозначающие отношение и объекты имеют  поря-

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

шения перед объектами:

Отношение       Объект            Объект

любит                   Мэри              яблоки

Несмотря на изменение  формы, его смысл остался тем  же самым, так как был изменен  только синтаксис. Теперь опять рассмотрим предложение:

Бет любит нечто, если Мэри любит (это же) нечто,

и заменим слово "нечто" на местоимение "это":

Бет любит это, если Мэри любит это

Заметьте, что это предложение  выражает два отношения "любит". Они соединены условием, выраженным словом "если".

Условие "если" требует  проверки предпосылки для вывода нового фак

та. И, таким образом, имеются следующие отношения:

 

 

Отношение        Объект     Объект     Условие

любит                   Мэри        яблоки

любит                    Бет              это            если

любит                    Мэри           это

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

Если группа предложений  не содержит информации о том, что конкретно и в каком предложении обозначает местоимение "это", то вы не знаете точного смысла предложения. Вы не можете вывести каких-либо новых фактов из предложения

Бет любит это, если Мэри любит это

потому, что вы не знаете, что обозначает местоимение "это".

Но, если вы опять посмотрите на предпосылки, то обнаружите, что

Мэри любит  яблоки

Теперь вы имеете вполне определенное значение для местоимения

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

Имея в виду значение "яблоки" для местоимения "это", предложения

могут быть переформулированы  следующим образом:

любит Мэри яблоки

любит Бет это (яблоки), если Мэри любит это (яблоки)

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

 

Таб. 1. Таблица  основных языковых конструкций Турбо-Пролога.

2.2.2 Пролог и логика  предикатов

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

Турбо-Пролога, то обнаружите, что он весьма близок к естественному.

Вам уже встречалась  следующая конструкция:

Отношение        Объект            Объект

Любит                  Мэри                яблоки

Отношение "любит" связывает  объекты "Мэри" и "яблоки" в конструкцию, обладающую определенным смыслом. Отношение "любит" может быть также названо предикатом:

Предикат         Объект            Объект

любит                  Мэри               яблоки

То же самое может  быть записано в виде

предикат(объект1,объект2)

или

любит (Мэри, яблоки)

Эта синтаксическая форма  очень близка к синтаксису Турбо-Пролога.

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

Тогда, используя синтаксис  Турбо-Пролога, этот факт будет иметь  вид:

любит(мэри, яблоки).

Заметьте, что это выражение  заканчивается точкой. Точка означает: "Здесь конец части информации".

Вспомним, что второе предложение на русском языке "Бет любит это,

если Мэри любит это" является условной предпосылкой со связкой "если", указывающей на условное отношение. Также вспомните, что  местоимение "это" может иметь  переменное значение, изменяющиеся от

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

известными фактами.

Второе предложение  с использованием синтаксиса Турбо-Пролога имеет вид:

отношение(объект1,объект2) условие отношение(объект1,объект2)

любит            (бет,            X)          если      любит      (мэри,         X)

Это предложение является правилом по терминологии Турбо-Пролога. Само название подразумевает, что правило используется Прологом для проверки условия вывода нового факта. Все известные отношения, касающиеся Мэри, Бет и яблок с использованием синтаксиса Турбо-Пролога имеют вид:

любит(мэри, яблоки).

любит(бет, X) если любит (мэри, X).

Эти знания включают один факт "Мэри любит яблоки" и одно правило "Бет любит это, если Мэри любит это". Вы знаете, по крайней мере, одно значение для переменной X (или слова "это"), так как известен факт, что Мэри любит яблоки. Местоимение "это" обозначает "яблоки", так что переменная X имеет значение "яблоки".

Может возникнуть вопрос, как Турбо-Пролог определяет, что  надо подставить "яблоки" вместо X в этом правиле. Вспомните, что в  декларативных языках различие между данными программы и шагами,

Которые должна выполнить программа для получения решения, менее существенно, чем в императивных языках, например, таких как Си или Паскаль. Турбо-Пролог сопоставляет все доступные ему факты (в данном случае кто что любит) с любым правилом, с помощью которого могут быть

выведены новые факты.

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

это сравнение удовлетворяет  некоторым условиям". Турбо-Пролог построен так, что он автоматически пытается выполнить сопоставление, используя принципы логики предикатов. Все, что вам необходимо сделать - это, ис-

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

2.3 Управление программой

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

Предикатная конструкция, называющаяся целью, используется для запуска процесса выполнения программы. Турбо-Пролог пытается сопоставить цель с фактами и правилами программы. Если цель является фактом, таким как "любит(мэри, яблоки)", то Турбо-Пролог отвечает True (истина) или False (ложь); если цель содержит переменные, то Турбо-Пролог выдает либо те их значения, которые приводят к решению, если оно существует, либо сообщение No solutions (решений нет).

2.3.1 Цели программы

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

После того, как Турбо-Пролог запущен, он не выполняет ничего полезного до тех пор, пока ему не встретится оператор цели. Цель состоит из взаимосвязанных предикатов. Ее структура точно такая же как у правила или факта. В примере с Мэри, Бет и яблоками отношением (символом предиката) является "любит". Тот же самый символ "любит" может быть использован как цель. Предикат цели сопоставляется с предикатами в программе, так что цель в этом примере будет иметь объект, как и предикат "любит", рассмотренный ранее. Цель будет иметь вид:

любит(бет,яблоки).

Эта цель фактически означает, что вы хотите знать, действительно  ли

Бет любит яблоки в  соответствии с информацией, имеющейся  в программе.

2.3.3 Результат доказательства цели

Если цель любит(бет,яблоки), она же likes(beth, apples) успешно доказана, то Турбо-Пролог информирует об этом, выдавая сообщение True. Если бы целью было likes(beth, oranges), а программа содержала бы те же факты и правила, то эта цель была бы неуспешной, а сообщение было бы False.

Манипулирование данными и управление программой определяется фактами и правилами. В Турбо-Прологе факты и правила называются утверждениями. Факт

finds(john, gold).                /* Джон нашел золото */

является утверждением.

Правило

is(john, rich) if finds(john, gold). /* Джон богат, если */

      /* Джон нашел золото */

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

2.3.4 Связки и другие  символы

Часто условия требуют  более одной предпосылки. Например, "Джон и Мэри женаты, если Мэри жена Джона и если Джон муж Мэри". На Турбо-Прологе это правило записывается в виде:

married(john, mary) If wife(john, mary) and husband(mary, john).

Данное правило имеет  два условия, соединенные словом and

(и). Используя терминологию Пролога, это есть связка двух условий, объединенных словом and. В Прологе вместо слова and часто используется запятая (,). В Турбо-Прологе также используется слово and, однако применение запятой предпочтительнее, т.к. в этом случае чтение программы легче. Кроме того, в Прологе используется так же специальный символ для слова if (если). Это символ :- (двоеточие с последующим тире).

С использованием символов для представления "и" и "если" отношение "женаты" (married) записывается в виде:

married(john, mary) :- wife(john, mary), husband(mary, john).

Точка с запятой (;) используется для представления связки or (или).

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

2.3.5 Цели и подцели

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

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

Пусть, например, программа содержит следующие утверждения:

likes(mary, apples).              /* Мэри любит яблоки */

color(apples, red).               /* цвет яблок красный */

Введем цель

likes(mary, apples),color(apples, red).

Утверждения заканчиваются  точками и являются независимыми фак-

Информация о работе Турбо-Пролог