logo
ГОСы / Шпоры ИИС

Язык создания экспертных систем clips: поддерживаемые парадигмы, основные структуры данных, конструкции языка для обработки данных и осуществления вывода.

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

Основные конструкции:

факты - одна из основных форм представления данных в CLIPS. Каждый факт представляет собой определенный набор данных, сохраняемый в текущем списке фактов — рабочей памяти системы.

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

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

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

CLIPS сочетает в себе 3 парадигмы программирования: логическую, процедурную и объектно-ориентированную. Также, в CLIPS предусмотрены 3 основных формата представления информации: факты, глобальные переменные и объекты.

Интерфейс среды CLIPSWindows в целом соответствует Prolog. Команда (run) запускает выполнение программы в среде (с машиной логического вывода), (reset) – обновляет рабочую память, а (clear) – полностью очищает среду CLIPS (рабочую память). Опция главного меню Load позволяет загрузить файл с конструкциями, а Load Batch – файл с командами (программу).

Форматы представления данных в CLIPS

Факты являются одной из основных форм высокого уровня для представления информации в системе CLIPS. Факт (fact) – это список элементарных значений, на которые ссылаются либо позиционно (упорядоченные (ordered) факты), либо по имени (неупорядоченные (non-ordered) или шаблонные (template) факты).

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

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

Для создания пользовательского класса используется конструкция defclass.

Правила, функции и хэндлеры в CLIPS

Среда CLIPS имеет встроенные средства для осуществления логического вывода, но позволяет программисту управлять очередностью выполнения правил (посредством параметра salience).

Эвристический подход. Одним из основных подходов к представлению знаний в CLIPS является использование правил. Разработчик интеллектуальной системы (инженер по знаниям) задает набор правил, которые совместно работают над разрешением проблемы.

Процедурный подход. CLIPS также поддерживает процедурный механизм, как большинство традиционных языков программирования, таких как Pascal или C. Функции, заданные конструкцией deffunction и встроенные функции CLIPS позволяют пользователю создавать новые исполнимые элементы, выполняющие полезные второстепенные действия или возвращают некоторое полезное значение.

В CLIPS процедурный и эвристический механизмы представления знаний могут тесно взаимодействовать путем вызова пользовательских функций как из LHS, так и из RHS. для создания пользовательских функций используется конструктор deffunction.

Взаимодействие с классами осуществляется путём отправки им «сообщений». Для этого сначала определяется «хэндлер» (по смыслу близок к функциям), через конструкцию defmessage-handler:

(defmessage-handler Guideline print-tag () ; выводит содержимое слота tag класса Guideline

(printout t ?self:tag crlf)

)

Затем в нужном месте программы классу отправляется «сообщение»:

?guideline <- (object (is-a Guideline))

=>

(send ?guideline print-tag ())