скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Программирование на языке CLIPS

Реферат: Программирование на языке CLIPS

Министерство общего и профессионального образования

Российской Федерации

Кубанский Государственный Технологический Университет


Курсовая работа на тему:

 

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ  CLIPS


Работу выполнил

студент группы 01-КТ-22 факультета КТАС Мариненко А. А.


Краснодар 2001

СОДЕРАЖНИЕ


·     А.1. Краткая история CLIPS                                                                           3

·     А.2. Правила и функции в CLIPS                                                                            3

·     А.3. Обектно-ориентированные средства в CLIPS                                                10

·     А.4. Задача «Правдолюбцы и лжецы»                                                          15

·     А.5 Стиль программирования на языке CLIPS                                           66


 

А.1. КРАТКАЯ ИСТОРИЯ CLIPS

Название языка CLIPS – аббревиатура от C Language Integrated Production System. Язык был разработан  в центре космических исследований  NASA

{NASA’s Johnson Space Center} в середине 1980-х годов и во многом сходен с языками , созданными на базе LIPS, в частности OPS5 и ART. Использование C в качестве языка реализации объясняется тем, что компилятор LISP не поддерживается частью распространенных платформ, а также сложностью интеграции LISP-кода в приложения, которые используют отличный от LIPS язык программирования. Хотя в то время на рынке уже появились программные средства для задач искусственного интеллекта, разработанные на языке C , специалисты из NASA решили создать такой продукт самостоятельно. Разработанная ими система в настоящее время доступна во всем мире, и нужно сказать, что по своим возможностям она не уступает множеству гораздо более дорогих коммерческих  продуктов.

Первая версия представляет собой, по сути, интерпретатор порождающих правил. Процедурный язык и объективно-ориентированное расширение CLIPS Object-Oriented Language {COOL} были включены в этот программный продукт только в 1990-х годах. Существующая  в настоящее время версия может эксплуатироваться на платформах UNIX, DOS, Windows и Macintosh. Она является хорошо документированным общедоступным программным продуктом и доступна по сети FTR с множества университетских сайтов. Исходный код программного пакета CLIPS распространяется совершенно свободно и его можно установить на любой платформе, поддерживающей стандартный компилятор языка C. Однако я бы рекомендовал пользоваться официальной версией  для определенной платформы, поскольку такие версии оснащены пользовательским интерфейсом, включающим меню команд и встроенный редактор.

Это Приложение организовано следующим образом. В разделе А.2. рассмотрены основные функции языка, описание правил и процедурного языка. В разделе А.3. представлены методы работы с объектами и показано, как использовать их в сочетании с правилами и процедурами. В разделе А.4. описан пример, демонстрирующий некоторые приемы программирования правил, а в разделе А.5. резюмируются  характеристики этого программного продукта и предлагаются темы для более углубленного изучения.

А.2. ПРАВИЛА И ФУНКЦИИ В CLIPS

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)

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

А.2.3. Наблюдение за процессом интерпретации

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

(defrule start

          (initial-fact)

=>

          (printout t “hello, world” crlf)

)

Выполните команду reset. Для этого введите эту команду в командной строке интерпретатора

CLIPS> (reset)

Либо выберите в меню команду Execution=>Reset, либо нажмите <CTRL+U> (последних два варианта возможны в версии, которая работает под Windows).

Затем запустите интерпретатор. Для этого введите эту команду run в командную строку интерпретатора

CLIPS> (run)

Либо выберите в меню команду Execution=>Run, либо нажмите <CTRL+R> (последних два варианта возможны в версии, которая работает под Windows).

В ответ программа должна вывести сообщение hello, world, знакомое всем программистам мира. Для повторного запуска программы повторите команды reset и run.

Если в меню Execution=>Watch ранее был установлен флажок Rules или перед запуском программы на выполнение вы ввели в командную стоку команду watch rules, то на экране появиться результат транссировки процесса выполнения

CLIPS> (run)

FIRE 1 start: f-0

hello, world

В этом сообщении в строке, начинающейся с FIRE, выведена информация об активизированном правиле: start – это имя правила, а f-0 – имя факта, который «удовлетворил» условие в этом правиле. Команда watch позволяет организовать несколько разных режимов трассировки, с деталями которых вы можете познакомиться в Руководстве пользователя. Если перед запуском программы вы ввели

CLIPS> (dribble-on “dribble.dp”)

TRUE

То выведенный протокол трассировки будет сохранен в файле dribble.clp. Сохранение протокола прекратится после ввода команда

CLIPS> (dribble-off)

TRUE

Это очень удобная опция, особенно на этапе освоения языка.

 

А.2.4. Использование шаблонов

 

Для определения фактов можно использовать не только списочные структуры, но и шаблоны, которые напоминают простые записи. (Шаблоны в CLIPS не имеют ничего общего с шаблонами C++.) Шаблон выглядит примерно так:

(deftemplate student “a student record”

         (slot name (type STRING))

         (slot age (type NUMBER)  (default 18))

)

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

Если в программу включено приведенное выше определение шаблона, то выражение

(deffacts students

           (student (name fred))

           (student (name freda) (age 19))

)

приведет к тому, что в базу фактов после выполнения команды reset будет добавлено

(student (name fred) (age 18))

(student (name freda) (age 19))

А.2.5. Определение функций

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

(deffunction hypotenuse (?a ?b)

      (sqrt (+ (* ?a ?a) (* ?b ?b))

)

Формат определения функции в CLIPS следующий:

(deffunction <имя функции> (<аргумент> …..<аргумент>)

          <выражение>

          …………….

         <выражение>

)

Функция возвращает результат последнего выражения в списке.

Иногда выполнение функции имеет побочные эффекты, как в приведенном ниже примере.

(deffunction init (?day)

       (reset)

       (assert (today is ?day))

)

В результате после запуска функции на выполнение командой

Страницы: 1, 2, 3, 4, 5, 6, 7, 8


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.