![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Логическое программирование на языке Пролог. Представление знаний о предметной области в виде фактов и правил базы знаний Пролога. Организация повторений.
Пролог является представителем семейств языков логического программирования и в сравнении с традиционными языками программирования, предназначенными для записи алгоритмов обладает существенными особенностями: - программа на Прологе не является алгоритмом, а представляет собой запись условия задачи на языке формальной логики. - язык пролог не предназначен для решения вычислительных или графических задач, а для решения логических задач. Для моделирования процесса логического умозаключения человека. - Пролог требует особого стиля мышления программиста, что затрудняет его теми, кто привык к процедурному программированию. Программирование на Прологе включает в себя следующие этапы: 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). Символ: - имеет смысл " если", и служит для разделения двух частей правила: заголовка и тела.
|