А. 2. Правила и функции в clips — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

А. 2. Правила и функции в clips

2020-04-01 220
А. 2. Правила и функции в clips 0.00 из 5.00 0 оценок
Заказать работу

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

Основными компонентами языка описания правил являются база фактов (fact base) и база правил (rule base). На них возлагаются следующие функции:

- база фактов представляет собой исходное состояние проблемы;

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

 

Машина логического вывода CLIPS сопоставляет эти факты и правила и выясняет, какие из правил можно активизировать. Это выполняется циклически, причем каждый цикл состоит из трех шагов:

(1) сопоставление фактов и правил;

(2) выбор правила, подлежащего активизации;

(3) выполнение действий, предписанных правилом.

 

Такой трехшаговый циклический процесс иногда называют «циклом распознование – действие»

 

А.2.1. Факты

 

Сразу после запуска CLIPS-приложения на выполнение на экране появится приглашение, извещающее пользователя, что он работает с интерпретатором.

CLIPS>

В режиме интерпретатора пользователь может использовать множество команд. Факты можно включить в базу фактов прямо из командной строки с помощью команды assert, например:

CLIPS> (assert (today is Sunday))

<Fact-0>

CLIPS> (assert (weather is warm))

<Fact-0>

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

Для вывода списка фактов, имеющихся в базе, используется команда facts:

 

CLIPS>(facts)

f-1 (today is Sunday)

f-2 (weather is warm)

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

Для удаления фактов из базы используется команда retract.

CLIPS> (retract 1)

CLIPS> (facts)

f-0 (today is Sunday)

 

Эти же команды, assert и retract, используются в выполняемой части правил (заключении правила) и с их помощью выполняется программное изменение базы фактов. Часто приходится пользоваться и другой командой интерпретатора, clear, которая очищает базу фактов (как правило, эта команда доступна в одном из выпадающих меню).

 

CLIPS> (clear)

CLIPS> (facts)

В тексте программы факты можно включать в базу не по одиночке, а целым массивом. Для этого в CLIPS имеется команда deffacts.

(deffacts today

(today is Sunday)

(weather is warm)

)

Выражение deffacts имеет формат, аналогичный выражениям в языке LISP. Выражение начинается с команды deffacts, затем приводится имя списка фактов, который программисти собирается определить (в нашем примере – today), а за ним следуют элементы списка, причем их количество не ограничивается. Этот массив фактов можно затем удалить из базы командой undeffacts.

CLIPS> (undeffacts today)

Выражение deffacts можно вводить и в командную строку интерпретатора, но лучше записать его в текстовый файл с помощью редактора CLIPS или любого другого текстового редактора. Загрузить этот файл в дальнейшем можно с помощью команды в меню File либо из командной строки.

CLIPS> (load “my file”)

Однако после загрузки файла факты не передаются сразу же в базу фактов CLIPS. Команда deffacts просто указывает интерпретатору, что существует массив today, который содержит множество фактов. Собственно загрузка выполняется командой reset.

CLIPS> (reset)

Команда reset сначала очищает базу фактов, а затем включает в неё факты из всех раннее загруженных массивов. Она также добавляет в базу единственный системно определенный факт:

f-0 (initial-fact)

Это делается по умолчанию, поскольку иногда имеет смысл включить в программу правило start rule, которое может быть сопоставлено с этим фактом и позволит выполнить какие-либо нестандартные инициализирующие операции. Однако включать такое правило в программу или нет – дело программиста.

Можно проследить, как выполняется команда reset, если перед выполнением приведенных выше команд установить режим слежения среды разработки. Для этого нужно вызвать команду Watch из меню Execution и установить в ней флажок Facts.

 

А.2.2. Правила

 

В языке CLIPS правила имеют следующий формат:

(defrule <имя правила>

    < необязательный комментарий >

    < необязательное объявление >

    < предпосылка_1 >

     ……………….

   < предпосылка_m >

=>

   < действие_1 >

    ………………..

   < предпосылка_n >

)

Например:

(defrule chores

        “Things to do on Sunday”

        (salience 10)

        (today is Sunday)

        (weather is warm)

=>

       (assert (wash car))

       (assert (chop wood)

)

 

В этом примере Chores – произвольно выбранное имя правила. Предпосылки в условной части правила

(today is Sunday)

(weather is warm)

сопоставляются затем интерпретатором с базой фактов, а действия, перечисленные в выполняемой части правила (она начинается после пары символов =>), вставят в базу два факта

(wash car)

(chop wood)

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

“Things to do on Sunday”

“Что делать в воскресенье”

поможет в дальнейшем вспомнить, чего ради это правило включено в программу. Выражение

(salience 10)

указывает на степень важности правила. Пусть например, в программе имеется другое правило

(defrule fun

      “Better things to do on Sunday”

      (salience 100)

      (today is Sunday)

      (weather is warm)

=>

     (assert (drink beer))

     (assert (play guitar))

)

 

Поскольку предпосылки обоих правил одинаковы, то при выполнении оговоренных условий они будут «конкурировать» за внимание интерпретатора. Предпочтение будет отдано правилу, у которого параметр salience имеет более высокое значение, в данном случае – правилу fun. Параметру salience может быть присвоено любое целочисленное значение в диапазоне [-10000, 10000]. Если параметр salience в определении правила опущен, ему по умолчанию присваивается значение 0.

Обычно в определении правила присутствуют и переменные. Если, например, правило

(defrule pick-a-chore

        “Allocating chores to days”

        (today is?day)

        (chore is?job)

=>

        (assert (do?job on?day))

)

будет сопоставлено с фактами

(today is Sunday)

(chore is carwash)

то в случае активизации оно включит в базу новый факт

(do carwash on Sunday).

 

Аналогично, правило

(defrule drop-a-chore

        “Allocating chores to days”

        (today is?day)

       ?chore <- (do?job on?day)

=>

       (retract?chore)

)

отменит выполнение работ по дому (a chore). Обратите внимание на то, что оба экземпляра переменной?day должны получить одно и то же значение. Переменная?chore в результате сопоставления должна получить ссылку на факт, который мы собираемся исключить из базы. Таким образом, если это правило будет сопоставлено с базой фактов, в которой содержатся

(today is Sunday)

(do carwash on Sunday)

то при активизации правила из базы будет удален факт

(do carwash on Sunday)

С подробностями выполнения процесса сосоставления в интерпретаторе CLIPS вы сможете познакомиться в Руководстве пользователя, а здесь только отметим, что факт

(do carwash on Sunday)

будет сопоставлен с любым из представленных ниже образцов

(do?? Sunday)

(do? on?)

(do? on?when)

(do $?)

(do $? Sunday)

(do?chore $?when)

 

Учтите, что префикс $? является признаком сегментной переменной, которая будет связана с сегментом списка. Например, в приведенном выше примере переменная $?when будет связана с

(on Sunday)

Если за префиксами? и $? не следует имя переменой, они рассматриваются как универсальные символы подстановки, которым соответственно может быть сопоставлен любой элемент или сегмент списка.

 


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.027 с.