d9e5a92d

Логический вывод в разных контекстах






Ниже приведен программный код на языке CLIPS, в котором реализована описанная выше стратегия работы со множеством контекстов.

;; ШАБЛОНЫ

;; Fact представляет собой субъект с определенными

;; свойствами.

;; Поле "world" несет информацию о контексте,

(deftemplate fact

(field subj (type SYMBOL))

(field attr (type SYMBOL))

(field world (type INTEGER))

)

;; Act представляет действие с объектом.

;; Поле "world" несет информацию о контексте.


(deftemplate act

(field action (type SYMBOL))

(field object (type SYMBOL))

(field world (type INTEGER))

)

;; Context имеет статус либо OK ,

;; либо NG (no good - плохой).

(def template context

(field id (type INTEGER))

(field status (type SYMBOL))

)

;; Модель мира в исходном состоянии.

(def facts model

(context (id 1) (status OK))

(fact (subj weather) (attr sunny) (world 1))

)

; ; ПРАВИЛА

; ; Если дождя нет,

;; создать новый контекст, в котором можно

;; пропустить занятия.

(def rule skip

(fact (subj weather) (attr ?W&~rainy) (world ?C)) =>

(assert (act (action skip) (object class)

(world (+ ?C 1)))) (assert (context

((id (+ ?C 1)) (status OK)))

)

;; Если пропустить занятия,

;; то на экзамене вас ждет провал.

(defrule fail

(act (action skip) (object class) (world ?W)) =>

(assert (act (action fail) (object exam) (world (?W)))

)

;; Если контекст содержит действие fail,

;; пометить его маркером NG. (defrule poison

(act (action fail) (world ?W)) .

?C <- (context (id ?W) (status OK)) =>

(modify ?C (status NG))

)

Как только контекст будет помечен маркером NG, с ним можно будет выполнять операции, предусмотренные для отравленного контекста, например удалить все связанные с ним факты и действия (см. упр. 8 в конце главы).



Содержание раздела