скачать рефераты
  RSS    

Меню

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

скачать рефераты

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

;; reason объектов claim.

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

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

(defrule unwrap-true

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

                (done 0))

      ?S <- (statement (speaker ?X)

                (claim ?P&: (not (eg ?P SAY)) $?Y)

                (done 0))

=>

      (printout

                t crlf

                “Assuming “ T ?X “ and “ ?P $?Y “ in world “ ?N

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

                t crlf

)

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

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

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

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

;; распаковано.

(modify ?W (done 1))

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

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

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

      (scope truth)))

;; Предполагается, что утверждение в высказывании

;; истинно.

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

      (scope truth)))

)

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

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

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

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

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

(defrule unwrap-true-state

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

                         (done 0))

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

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

                ?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).

(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, использование объектов и обработчиков сообщений позволяет успешно решить задачу рациональной организации данных и процедур в программе.


Страницы: 1, 2, 3, 4, 5, 6, 7, 8


Новости

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

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

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.