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

31. Логическое программирование на языке Пролог. Представление знаний о предметной области в виде фактов и правил базы знаний Пролога. Организация повторений.

Пролог является представителем семейств языков логического программирования и в сравнении с традиционными языками программирования, предназначенными для записи алгоритмов обладает существенными особенностями:

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

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

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

Программирование на Прологе включает в себя следующие этапы:

  1. Объявление фактов и отношений между ними

  2. Определение правил взаимосвязи объектов и отношений между ними.

  3. Формулировка вопроса об объектах и отношений между ними.

Рассмотрим объекты которыми оперирует Пролог:

Имена – это последовательность букв и цифр, начинающиеся с буквы (строчной).

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

:- обозначает импликацию (если, то)

? обозначает отрицание

! обозначает отсечение

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

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

Списки – представляют собой объединение элементов произвольного вида, разделённых запятыми и заключённых в квадратные скобки. Списки от структур отличаются тем, что количество элементов может меняться при выполнении программы. Пример списков: [зелёный, жёлтый, красный].

Структура программы. Программа на языке Prolog состоит из следующих разделов:

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

domains

person, thing = symbol

predicates

likes (person, thing)

/*Эти объекты имеют смысл «Тот, кто любит» и «Вещь, которую любят». */

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

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

predicates служит для описание используемых программой предикатов; Prolog требует указания типов объектов для каждого предиката программы. Некоторые из этих объектов могут быть, к примеру, числовыми данными, а другие – символьными строками. Поэтому в этом разделе необходимо задать тип объектов каждого из предикатов:

predicates

likes (symbol, symbol) /*это означает,что два объекта предиката likes относятся к типу symbol*/

Комментарии обромляются символами /* и */

goal формулируется назначение создаваемой программы; составными частями при этом могут являться некие подцели, из которых формируется единая цель программы;

clauses заносятся факты и правила, известные априорно; о содержимом этого раздела можно говорить как о данных, необходимых для работы программы. Например,

clauses

likes(“John”, camera).

likes (“Tom”,computer).

likes (“Kathy”,computer).

Термы John, Tom, Kathy принадлежат к домену person, а термы camera и computer – к домену thingю Все три утверждения относятся к одному предикату, но значения у них разные.

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

Внутренние цели – начинается с goal, это цель поиска, которые задаются в самой программе. Для вывода на экран во внутренних целях, используется предикат write. Например,

write («Любимые вещи: »),

write (X), nl,

write (Y, «любит», Z)

/*nl – перенос курсора на новую строку*/

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

Запросы строятся из предикатов, содержащих условия, которые ограничивают пути поиска желаемых результатов, причем в случае, когда какой-либо запрос нужно повторить несколько раз, разумно предусмотреть возможность не задавать всякий раз одни и те же условия. Чтоб для получения ответов не использовать факты из БД, конструируются правила, не содержащие в себе данных, т.е правила нулевой арности. Например,

Дебби сестра Сэма, т.к у них одни и те же родители, и Дэбби – девочка. Это можно записать, как

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

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

Девочка(Катя).

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

likes(cindy,Something):-

likes(bill,Something).

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

Методы повторения на основе отката

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]