Программирование на языке 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 Кб (Скачать)

(assert (claim (content F ?X) (reason ?N) (scope falsity)))

)

 

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

;; ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

 

;; Правила отрицания

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

;; ЕСЛИ некто не  правдолюбец,

;; ТО он лжец.

(defrule not1

(declare (salience 5))

?F <- (claim content NOT T ?P))

=>

(modify ?F (content F ?P))

)

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

;; ЕСЛИ некто не  лжец,

;; ТО он правдолюбец.

(defrule not2

(declare (salience 5))

?F <- (claim content NOT F ?P))

=>

(modify ?F (content T ?P))

)

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

;; Распространение отрицания  на дизъюнкцию.

(defrule not-or

(declare (salience 5))

?F <- (claim (content NOT OR ?P ?X ?Q ?Y))

=>

(modify ?F (content AND (flip ?P) ?X (flip ?Q) ?Y))

)

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

;; Распространение отрицания  на конъюнкцию.

(defrule not-or

(declare (salience 5))

?F <- (claim (content NOT AND ?P ?X ?Q ?Y))

=>

(modify ?F (content OR (flip ?P) ?X (flip ?Q) ?Y))

)

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

;; Устранение конъюнкции.

(defrule conj

(world (tag ?N) (scope ?V) (task check)

(context ?L))

(claim (content AND ?P ?X ?Q ?Y) (reason ?N)

(scope ?V) (context ?L)

=>

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

(scope ?V) (context ?L))

(assert (claim (content ?Q ?Y) (reason ?N)

(scope ?V) (content ?L))

)

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

;; ОБРАБОТКА ДИЗЪЮНКТИВНЫХ  УТВЕРЖДЕНИЙ

 

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

;; ЕСЛИ мы имеем  дело с дизъюнктивным утверждением,

;; т.е. context = 0,

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

;; ПРИМЕЧАНИЕ. Устанавливается  значение 1 как в поле

;; context объекта world, так и в поле context нового

;; объекта claim.

(defrule left-disjunct

?W <- (world (tag ?N) (task check) (scope ?V)

(content 0))

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

(scope ?V) (content 0))

=>

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

(scope ?V) (context 1))

)

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

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

;; противоречие,

;; ТО проанализировать  правый дизъюнкт.

(defrule right-disjunct

?W <- (world (tag ?N) (task contra) (context 1))

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

(scope ?V))

=>

(assert (claim (content ?Q ?Y) (reason ?N)

(scope ?V) (context 2)))

(modify ?W (task check) (context 2))

)

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

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

;; ТО установить соответствующий  контекст.

(defrule resume-disjunct

?W <- (world (tag ?N) (task back) (context 1))

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

(scope ?V))

=>

(assert (claim (content ?Q ?Y) (reason ?N)

(scope ?V) (context 2)))

(modify ?W (task check) (context 2))

)

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

;; ЕСЛИ анализ обоих  дизъюнктов в предположении о

;; правдивости персонажа привёл к противоречию

;; в том же самом  «мире»,

;; ТО выполнить анализ, предполагая, что персонаж лжёт.

(defrule false-disjuncts

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

(prior 0) (context 2))

(not (claim (reason ?M) (context 2)))

=>

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

)

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

;; ЕСЛИ аналих в  предположении о правдивости  персонажа

;;привёл к противоречию  с другим «миром»,

;; ТО выполнить анализ, предполагая, что персонаж лжёт.

(defrule other-world

?W <- (world (tag ?N) (scope truth) (task contra)

(prior ?M&~0) (context 0))

=>

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

)

 

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

;; ОБРАБОТКА ПРОТИВОРЕЧИЙ

 

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

;; ЕСЛИ обнаруживается  противоречие между предположением

;; и производными от  него фактами в пределах одного  и

;; того же мира и  в одном и том же контексте,

;; ТО зафиксировать противоречия и удалить

;; противоречивые утверждения  (объект claim)

;; из базы фактов.

(defrule contradiction

(declare (salience 100))

?W <- (world (tag ?N) (task check) (scope ?V)

(context ?S))

?P <- (claim (content ?F ?X) (scope ?V) (reason ?N)

(context ?S))

?Q <- (claim (content ?G&: (not (eq ?G ?F)) ?X)

(scope ?V) (reason ?N) (context ?S))

=>

(printout

t crlf

“CONTRADICTION: “ ?F ?X “ versus “

?G ?X “ in world “ ?N

;; “ПРОТИВОРЕЧИЕ между:  “ ?F ?X “ и “ ?G ?X “ в мире  “ ?N

t crlf)

(retract ?P)

(retract ?Q)

(modify ?W (task contra))

)

 

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

;; ЕСЛИ обнаруживается  противоречие между предположением

;; и производными от  него фактами в пределах одного  и

;; того же мира, но  в разных конекстах,

;; ТО зафиксировать проиворечие.

(defrule transcontext

(declare (salience 90))

?W <- (world (tag ?N) (task check) (scope ?V)

(context ?T))

(claim (content ?F ?X) (scope ?V) (reason ?N)

(context ?S&: (< ?S ?T)))

(claim (content ?G&: (not (eq ?G ?F)) ?X) (scope ?V)

(reason ?N) (context ?T))

=>

(printout t crlf

“TRANSCONTEXT CONTRADICTION: “ ?F ?X “ versus “

?G ?X “ in world “ ?N

;; “ТРАНСКОНТЕКСТНОЕ ПРОТИВОРЕЧИЕ между: “ ?F ?X

;; “ и “ ?G ?X “ в мире “ ?N

t crlf)

(modify ?W (task contra))

)

 

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

;; ЕСЛИ обнаруживается  противоречие между

;; текущим «миром»  в предположении о правдивости

;; и ранее покинутым  «миром»,

;; ТО зафиксировать  противоречие.

(defrule transworld-truth

(declare (salience 80))

?W <- (world (tag ?N) (scope truth) (task check)

(upper 0))

;; В текущем «мире» имеется  утверждение,

;; противоречащее утверждению  в другом «мире».

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

;; «Мир», с которым обнаружен  конфликт, имеет

;; индентефикатор, меньший, чем текущий «мир»,

;; т.е. сформирован  раньше.

(claim (content ?G&: (not (eq ?G ?F)) ?X)

(reason ?M&: (< ?M ?N)))

=>

(printout

t crlf

“TRANSWORLD CONTRADICTION: “ ?F ?X “ versus “

?G ?X “ in world “ ?N “ I “ ?M

;; “МЕЖМИРОВОЕ ПРОТИВОРЕЧИЕ: “ ?F ?X “ противоречит “

;; ?G ?X “ в мирах “ ?N “ I “ ?M

t crlf)

(modify ?W (task contra))

)

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

;; ЕСЛИ обнаруживается  противоречие между

;; текущим «миром»  в предположении о лживости

;; и ранее покинутым  «миром»,

;; ТО подготовиться  к выполнению отката в ранее

;; покинутый «мир».

(defrule transworld-falsity

(declare (salience 80))

?W <- (world (tag ?N) (scope falsity)

(task check) (upper 0))

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

(claim

(content ?G&: (not (eq ?G ?F)) ?X)

(reason (?M&: (< ?M ?N)))

=>

(printout

t crlf

“TRANSWORLD CONTRADICTION: “ ?F ?X “ versus “

?G ?X “ in worlds “ ?N “  I “ ?M

;; “МЕЖМИРОВОЕ ПРОТИВОРЕЧИЕ: “ ?F ?X “ проиворечит “

;; ?G ?X “ в мирах “ ?N “I “ ?M

t crlf

(modify ?W (task contra) (prior ?M))

)

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

;; ЕСЛИ обнаружено  противоречие между внедрённым  «миром»

;; метавысказывания и  ранее покинутым «миром»,

;; ТО удалить высказывание, связанное с внедрённым «миром».

(defrule upper-world

(declare (salience 80))

?W <- (world (tag ?N) (task check) (upper ?U&~0))

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

(claim

(content ?G&: (not (eq ?G ?F)) ?X)

(reason ?M&: (< ?M ?N)))

?S <- (statement (tag ?N) (reason ?U))

=>

(printout

t crlf

“TRANSWORLD CONTRADICTION: “ ?F ?X “versus “

?G ?X “ in worlds “ ?N “  I “ ?M

;; “МЕЖМИРОВОЕ ПРОТИВОРЕЧИЕ: “ ?F ?X “ проиворечит “

;; ?G ?X “ в мирах “ ?N “ I “ ?M

t crlf)

(retract ?S)

(modify ?W (task contra) (prior ?U))

)

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

;; ОПЕРАЦИИ УДАЛЕНИЯ

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

;; Удаление дизъюнкта.

(defrule clean-context

(declare (salience 50))

(world

(tag ?N)

(task ?T&: (or (eq ?T contra) ( eq ?T back))

(context ?S&~0))

?F <- (claim (reason ?N) (context ?S))

=>

(retract ?F)

)

 

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

;; ЕСЛИ текущий мир  проанализирован только

;; в предположении  о правдивости,

;; ТО проанализировать  его предполагая

;; лживость персонажа.

(defrule switch-scope

(declare (salience 40))

?W <- (world (tag ?N) (scope truth) (task contra)

(context ?C&~1)

=>

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

)

 

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

;; Удалить все утверждения,  сделанные в предположении

;; о правдивости, перед  тем как анализировать

;; предположение о  лживости.

(defrule sweep-claims

(declare (salience 100))

(world

(tag ?N) (scope truth) (context ?C&~1)

(task ?T&: (or (eq ?T contra) (eq ?T back))))

?F <- (claim (reason ?N) (scope truth (context ?D&~1))

=>

(retract ?F)

)

 

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

;; Удалить все объекты statement, основанные на предположении

;; о правдивости, перед  тем как анализировать

;; предположение о  лживости.

(defrule sweep-statements

(declare (salience 100))

(world

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

(scope truth) (context 0)

?F <- (statement (reason ?N) (scope truth))

=>

(retract ?F)

)

 

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

;; Удалить утверждения,  связанные с «миром»,

;; в котором обнаружены  противоречия.

(defrule kill-claims

(declare (salience 100))

(world (tag ?N) (task clean))

?F <- (claim (reason ?N))

=>

(retract ?F)

)

 

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

;; ЕСЛИ все ненужные  объекты claim или statement удалены,

;; ТО удалить объект world, которому назначена задача clean.

(defrule stop-killing

(declare (salience 100))

?W <- )world (tag ?N) (task clean))

(not (claim (reason ?N)))

=>

(retract ?W)

)

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

;; ОПЕРАЦИИ ОТКАТА

 

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

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

;; покинут без выполнения  анализы о предположении

;; о лживости (поле scope содержит значение truth,

;; а поле task – значение check).

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