Возможные усовершенствования

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

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

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

К сожалению, рассматриваемый интерпретатор в том виде, в каком он реализован
в программе, исключает возможность применять какие-либо методы перебора с воз­
вратами, поскольку в нем предусмотрен способ непосредственного манипулирования
базой данных с помощью предикатов sssertz и retract. Поэтому мы не имеем воз­
можности изучать альтернативные пути выполнения. Указанный недостаток можно
устранить, используя другую реализацию базы данных, в которой не применяются
предикаты asserts и retract языка Prolog. Один из способов решения такой зада­
чи может предусматривать представление всего состояния базы данных с помощью
терма Prolog, передаваемого в качестве параметра в процедуру run. Наиболее про­
стая возможность реализации такого решения состоит в организации этого терма как
списка объектов в базе данных. В подобном случае верхний уровень интерпретатора
может выглядеть следующим образом:
run( State) :-
Condition----------> Action,



Часть [!. Применение языка Prolog в области искусственного интеллекта

test! Condition, State), execute[ Action, State).

Затем процедура execute вычисляет новое состояние и вызывает процедуру run с

этим новым состоянием.

Проект

Реализуйте интерпретатор для программ, управляемых шаблонами, в котором ба­за данных не сопровождается в виде собственной внутренней базы данных Prolog (т.е. с помощью предикатов assertz и retract), а для ее сопровождения использу­ется параметр процедуры, в соответствии с приведенным выше замечанием. В таком случае новый интерпретатор будет обеспечивать автоматический перебор с возврата­ми. Попробуйте спроектировать представление базы данных, которое обеспечивало бы эффективное сопоставление с шаблонами.

Наши рекомендации