RSS    

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

                         (done 0))

=>

      (printout

                t crlf

                “Assuming “ T ?X “ and “ ?Z “ says “ $?Y

                         “ in world “ ?N

;; “Предполагается “ Т ?Х “ и “ ? Z “ говорит “ $?Y

;; “ в мире “ ?N

                t crlf

)

;; Зафиксировать, что высказывание было распаковано

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

(modify ?S (tag ?N) (done 1))

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

;; правдолюбцем.

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

      (scope truth)))

;; Зафиксировать в объекте world для внедрённого

;; высказывания и зафиксировать, что этот объект

;; является внутренним по отношению к объекту ?N.

(assert (world (tag (+ ?N 1)) (scope truth) (upper ?N)))

;; Зафиксировать внедрённое высказывание в новом

;; объекте world.

(assert (statement (speaker ?Z) (claim $?Y)

      (reason ?N)))

)

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

;; ЕСЛИ объект world базируется на предполодении о

;; лживости высказывания,

;; ТО предположить, что персонаж лжёт и что

;; высказывание ложно.

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

;; распаковки метавысказываний.

(defrule unwrap-false

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

      ?S <- (statement (speaker ?X)

      (claim ?P&: (not (eq ?P NOT) (eq ?P SAY))) $?Y)

                (tag ?N) (done 1))

=>

      (printout

                t crlf

                “Assuming “ F ?X “ and NOT “ in world “ ?N

;; “ Предполагается “ F ?X “ и НЕ “ ?P $?Y “ в мире “ ?N

                t crlf

)

;; Зафиксировать, что высказывание анализируется

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

(modify ?S (scope falsity) (done 2))

;; Зафиксировать в объекте world, что анализируется

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

(modify ?W (done 2))

;; Предположим, что персонаж лжец.

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

      (scope falsity)))

;; Сформировать отрицание утверждения.

(assert (claim (content NOT ?P $?Y) (reason ?N)

      (scope falsity)))

)

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

;; ЕСЛИ объект world базируется на предположении о

;; лживости метавысказывания,

;; ТО предложить, что персонаж лжец.

;; Каких-то предположений об истинности

;; утверждения не делается.

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

;; метавысказываниями, которые не содержат отрицаний.

;; Правило не может обрабатывать метавысказывания вида:

;; А: «В говорит, что он лжец.»

;; или А: «В говорит, что он не лжец.»

(defrule unwrap-false-state

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

      ?S <- (statement (speaker ?X) (claim SAY ?Z $?Y)

                (tag ?N) (done 1))

=>

      (printout

                t crlf

                “Assuming “ F “ “?X “ and NOT “ ?Z “ says “ $?Y

                         “ in world “ ?N

;; “Предполагается “ F “ “ ?X “ и НЕ “ ?Z “ говорит “ $?Y

;; в мире “ ?N

                t crlf

)

;; Изменить значения в поле scope текущего объекта

;; world.

(modify ?W (scope falsity) (done 2))

;; Зафиксировать, что высказывание было распаковано

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

(modify ?S (scope falsity) (done 2))

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

;; произнёсший метавысказывание лжец.

      (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 “

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14


Новости


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

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

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.