Автор: Пользователь скрыл имя, 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
(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).