МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программирование на языке 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))

    CLIPS> (assert (weather is warm))

    Для лучшего восприятия теста Приложения мы в дальнейшем будем

    выделять текст, вводимый пользователем, полужирным щрифтом, а запросы и

    ответы интерпретатора – обычным моноширинным шрифтом.

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

    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

    (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, либо нажмите

    (последних два варианта возможны в версии, которая работает под Windows).

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

    командную строку интерпретатора

    CLIPS> (run)

    Либо выберите в меню команду Execution=>Run, либо нажмите

    (последних два варианта возможны в версии, которая работает под 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))

    )

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

    CLIPS> (init Sunday)

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

    а затем в нее будет включен новый факт (today is Sunday).

    А.3. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ СРЕДСТВА В CLIPS

    Использование объектно-ориентированных средств в CLIPS позволяет

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

    данных можно применять механизм передачи и обработки сообщений методами

    классов. В этом разделе мы продемонстрируем, как это делается на примере,

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

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

    свойства, необходимые для моделирования.

    (defclass pistol

    (is-a USER)

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


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.