Программирование на языке Clips

Автор: Пользователь скрыл имя, 04 Марта 2013 в 18:15, курсовая работа

Краткое описание

Название языка CLIPS – аббревиатура от C Language Integrated Production System. Язык был разработан в центре космических исследований NASA
{NASA’s Johnson Space Center} в середине 1980-х годов и во многом сходен с языками , созданными на базе LIPS, в частности OPS5 и ART. Использование C в качестве языка реализации объясняется тем, что компилятор LISP не поддерживается частью распространенных платформ, а также сложностью интеграции LISP-кода в приложения, которые используют отличный от LIPS язык программирования.

Оглавление

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

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

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

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

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

Файлы: 1 файл

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

— 351.50 Кб (Скачать)

(defrule undirected-falsity

(declare (salience 20))

(world (tag ?N) (scope falsity) (task contra))

?W <- (world (tag ?M&: (< ?M ?N))

(scope truth) (task check))

=>

(modify ?W (task back))

)

;;----------------------------------------------------------------------

;; Хронологический откат  к тому «миру», который был

;; покинут без завершения  анализа дизъюнктов.

(defrule undirected-disjunct

(declare (salience 20))

(world (tag ?N) (scope falsity) (task contra))

?V <- (world (tag ?M&: (< ?M ?N)) (task check)

(context 1))

(claim (content OR ?P ?X ?Q ?Y) (reason ?M)

(scope ?S))

=>

;; Дизъюнкт в ране  покинутом «мире», анализ которого

;; не был выполнен.

(assert (claim (content ?Q ?Y) (reason ?M) (scope ?S)

(context 2))

;; Зафиксировать необходимость отката в этот «мир».

(modify ?V (task back))

)

;;----------------------------------------------------------------------

;; Удаление объектов world.

;; ЕСЛИ выполняется откат к объекту М,

;; ТО удалить все  объекты world,

;; имеющие идентификатор, больший М.

(defrule undo-world

(declare (salience 50))

(world (tag ?M) (task back))

?W <- (world (tag ?N&: (> ?N ?M)))

=>

(retract ?W)

)

;;----------------------------------------------------------------------

;; Откат к прежним  высказываниям.

(defrule restate

(declare (salience 50))

(world (tag ?M) (task back))

?S <- (statement (tag ?N&: (> ?N ?M))

(reason 0) (done ?X&~0)

=>

(modify ?S (done 0))

)

;;----------------------------------------------------------------------

;; Удаление объектов claim.

;; ЕСЛИ выполняется  откат к объекту world M,

;; ТО удалить все  объекты claim,

;; связанные с удалёнными  объектами world.

(defrule unclaim

(declare (salience 30))

(world (tag ?M) (task back))

?F <- (claim (reason ?N&: (> ?N ?M)))

=>

(retract ?F)

)

;;----------------------------------------------------------------------

;; Возобновление процесса  вычислений,

;; начиная с точки  возврата.

;; ЕСЛИ все объекты world, созданные

;; после объекта М,  удалены,

;; ТО повторно сформировать  объект М,

;; предположив лживость  высказывания.

(defrule restart

(declare (salience 20))

?W <- (world (tag ?M) (scope truth)

(task back) (context ?C&~1))

=>

(modify ?W (scope falsity) (task check) (context 0))

)

;;----------------------------------------------------------------------

;; ПЕРЕХОД К АНАЛИЗУ  СЛЕДУЮЩЕГО «МИРА» И

;; ВЫВОД ОТЧЕТА О  РЕЗУЛЬТАТАХ

 

;;----------------------------------------------------------------------

;; Переход к анализу  следующего «мира»,

;; ЕСЛИ никакие другие  правила не ожидают активизации,

;; ТО анализ текущего  «мира» завершён и

;; можно приступить  к формированию нового «мира»,

;; если имеются необработанные  высказывания.

;; ПРИМЕЧАНИЕ. Это правило  имеет приоритет,

;; более низкий, чем  все прочие правила,

;; исключая правило  вывода результатов.

(defrule move

(declare (salience -50))

;; Существует «мир»,  сформированный на основе

;; исходного высказывания.

?W <- (world (tag ?N&: (> ?N 0)) (task check)

;; В базе фактов  отсутствуют объекты world,

;; созданные позже  текущего.

(not (world (tag ?T&: (> ?T ?N))))

;; В базе фактов  имеется высказывание, подготовленное

;; к созданию нового  объекта world.

(statement (reason 0) (done 0))

=>

;; Сформирован новый объект world на основе

;; этого объекта statement.

(assert (world (tag (+ ?N 1))))

)

;;----------------------------------------------------------------------

;; ЕСЛИ отсутствуют  противоречия в объектах world,

;; ТО распечатать результаты.

;; ПРИМЕЧАНИЕ. Это правило  будет активизироваться

;; повторно до тех  пор, пока не будет выведена

;; непротиворечивая интерепритация.

(defrule report-result

(declare (salience -40))

(not (world (task contra)))

(not (statement (reason 0) (done 0)))

(statement (tag ?N) (done ?M&~0))

(claim (content ?P ?X) (reason ?N)

=>

(printout

t crlf

“RESULT: “ ?P ?X “ from statement “ ?N

;; “РЕЩУЛЬТАТ: “ ?P ?X “ из высказывания “ ?N

t crlf)

)

;;----------------------------------------------------------------------

;; ЕСЛИ противоречие  остаётся и после анализа всех  точек отката

;; и нет больше правил, которые можно было бы активизировать,

;; ТО прекратить процесс  вычислений.

(defrule sanity-check

(declare (salience -100))

(world (tag ?N) (task ?T&: (or (eq ?T contra)

(eq ?T back))))

(not (world (tag ?M&: (< ?M ?N)) (scope truth)

(task check)))

=>

(printout

t crlf

“FAIL: Statements inconsistent, detected in world “ ?N

;; “РЕШЕНИЕ НЕ НАЙДЕНО: Высказывания противоречивы,

;; обнаружены в мире “ ?N

t crlf)

(halt)

)

 

Я не сомневаюсь в том, что эту программу можно совершенствовать и далее. Можно, например, попытаться использовать технологию отката, основанную на комбинировании направленных и хронологических методов пойска точки возврата. Но и в том виде, в каком она здесь представлена, программа справляется со всеми сформулированными в тексте приложения задачами. Анализируя текст программы, вы можете убедиться в том, что язык CLIPS позволяет реализовать многие из описанных в данной книге технологий, в частности:

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

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

 

А.5. СТИЛЬ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ CLIPS

 

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

Эта программа является относительно простой и включает всего 35 правил, тогда как в практических экспертных системах их может быть значительно больше. Наприме, в прототипе системы R1/XCON, который был разработан в 1980 году, содержалось около 750 правил, причём по мере совершенствования системы их число росло и к 1984 году достигло 3300. В среднем каждое правило в R1 анализирует шесть условий и выполняет три действия.

Как и при программировании любфх  других задач, ключевым условием разработки «хорошого» программного кода является правильный выбор набора абстрактных  понятий, которыми должна манипулировать программа, и набора операций, которые она должна выполнять. Первое условие поможет рационально выбрать структуру объектов и форму представления условий в левой части правил, а второе – рационально организовать действия в правой части. Как было сказано в разделе А.3, использование объектов и обработчиков сообщений позволяет успешно решить задачу рациональной организации данных и процедур в программе.




Информация о работе Программирование на языке Clips