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

2. Краткая инструкция по работе в среде pie32

Оболочка PIE32 (Prolog-Interface-Engine под Win32) написана в среде Visual Prolog 5 датской фирмы PDC (Prolog Development Center). PIE32 оформлена в виде стандартного многооконного MDI приложения. На панели инструментов нестандартными пиктограммами продублированы основные команды меню:

  • работа с файлами: New, Open, Consult (Открыть и собрать);

  • правка: Undo, Redo, Cut, Copy, Paste;

  • работа с базой знаний: Reconsult (Собрать БЗ), Reset (Сбросить БЗ), Trace On/Off (Вкл/Выкл трассировку БЗ), Pause On/Off (Пауза), Stop (Остановить вывод).

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

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

Перед работой с базой знаний ее необходимо «собрать», т.е. перевести ее текстовое описание во внутреннюю структуру данных, удобную для обработки и хранения в оперативной памяти. База знаний собирается командами Consult (при открытии) и Reconsult (после редактирования). Собирается только текущая база знаний, расположенная в активном окне редактора баз знаний.

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

3. Механизм вывода в системе Пролог. Примеры Термы и объекты

Программа на языке Пролог обычно описывает некую действительность. Объекты (элементы) описываемого мира представляются с помощью термов. Терм интуитивно означает объект. Существует 4 вида термов: атомы, числа, переменные и составные термы. Атомы и числа иногда группируют вместе и называют простейшими термами.

Атом - это отдельный объект, считающийся элементарным. В Прологе атом представляется последовательностью букв нижнего и верхнего регистра, цифр и символа подчеркивания '_', начинающейся со строчной буквы. Кроме того, любой набор допустимых символов, заключенный в апострофы, также является атомом. Наконец, комбинации специальных символов + - * = < > : & также являются атомами (следует отметить, что набор этих символов может отличаться в различных версиях Пролога).

Пример: Представленные далее последовательности являются корректными атомами:

b, abcXYZ, x_123, efg_hij, коля, слесарь,

'Это также атом Пролога',

+, ::, <---->, ***

Числа в Прологе бывают целыми (Integer) и вещественными (Float, в среде PIE32 не поддерживаются).

Синтаксис целых чисел прост, как это видно из следующих примеров: 1, 1313, 0, -97. Не все целые числа могут быть представлены в машине, их диапазон ограничен интервалом между некоторыми минимальным и максимальным значениями, определенными конкретной реализацией Пролога. PIE32 допускает использование целых чисел в диапазоне от -2147483648 (-231) до 2147483647 (231-1).

Синтаксис вещественных чисел также зависит от конкретной реализации. Мы будем придерживаться простых правил, понятных из следующих примеров: 3.14, -0.0035, 100.2. При обычном программировании на Прологе вещественные числа используются редко. Причина этого кроется в том, что Пролог - язык, предназначенный в первую очередь для обработки символьной, а не числовой информации. При символьной обработке часто используются целые числа, нужда же в вещественных числах невелика. Везде, где можно, Пролог старается привести число к целому виду.

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

X, _4711, X_1_2, Результат, _x23, Объект2, _

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

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

итого(клиент(X,23,_), 71)

что_случилось (ничего)

При задании имен термов предпочтительнее использовать мнемонические ("говорящие") имена, так как терм a(ж), например, гораздо менее информативен, чем терм aвтор(жюль_верн).

Еще одной важной структурой данных в Прологе является список. Мы познакомимся с ним позднее. Сейчас отметим только один из видов списков - список символов. Такие списки могут быть представлены в виде строк, например, первый аргумент составного терма возраст("Борис",10) - строка. При записи строки заключаются в кавычки.

Факты

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

Факт – это утверждение о том, что соблюдается некоторое конкретное отношение. Он является безусловно верным. В разговорной речи под фактом понимается нечто вроде "Сегодня солнечно" или "Васе 10 лет". Это запишется в виде

сегодня(солнечно).

возраст(вася,10).

Если вы сохраните эти факты в файле и затем загрузите его, то можно задавать вопросы интерпретатору Пролога (запрос вводится после приглашения Пролога, которое в большинстве версий имеет вид ?-, а в PIE32 запрос просто вводится в окне диалога), например,

?- сегодня(солнечно).

Yes

?- возраст(вася,10).

Yes

?- сегодня(солнечно),возраст(вася,10)

Yes

Запятая между фактами в последнем запросе означает операцию логического И (конъюнкцию).

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

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

имя_предиката(аргументы)

Аргументы перечисляются через запятую и представляют собой какие-то объекты или свойства объектов, а имя предиката обозначает связь или отношение между аргументами. Предикат однозначно определяется парой: имя и количество аргументов. Два предиката с одинаковым именем, но различным количеством аргументов, считаются различными. Количество параметров предиката называется его арностью (arity). При описании предиката арность указывают после его имени, разделяя их символом '/' (слэш).

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

Пример: Факт "Коля работает слесарем" на Прологе запишется следующим образом:

профессия(коля, слесарь).

Здесь предикат профессия/2 имеет два аргумента: первый означает имя человека, а второй - профессию. Факт "Борису 10 лет" можно представить в виде:

возраст("Борис", 10).

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

В приведенных выше примерах профессия/2 и возраст/2 - предикаты (составные термы), коля и слесарь - атомы, 10 - число, "Борис" - строка. Подробнее о видах термов Пролога рассказывается в следующем разделе.

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

Пример: Составим базу данных из следующих фактов: "слон больше, чем лошадь", "лошадь больше, чем осел", "осел больше, чем собака" и "осел больше, чем обезьяна":

больше(слон, лошадь).

больше(лошадь, осел).

больше(осел, собака).

больше(осел, обезьяна).

Мы использовали предикат больше/2, имеющий два параметра.

Сохраним эту базу данных в текстовом файле и затем познакомим Пролог с ней. Теперь можно формулировать запросы к интерпретатору Пролога:

?- больше(слон, лошадь).

Yes

?- больше(лошадь, слон).

No