Пример 14.14. Правило compute-response-other-times
(defrule compute- response-other-times
?f <- (current-iteration ?n&~0&:(< ?n ?*max-iterations*) )
=>
(bind ?pos (change-which-bit ?n) )
(bind ?nv) (- 1 (nth ?pos ?*gray-code*) ) )
(bind ?*gray-code* (replace$ ?*gray-code* ?pos ?pos ?nv) )
(send (nth ?pos ?*sources*) put-output-1 ?nv)
(assert (result ?*gray-code* = (str-implode (LED-response) ) ) )
(retract ?f)
(assert (current-iteration =(+ ?n 1)))
)
Логика работы правила compute-response-other-times подобна работе правила compute-response-1st-time, за исключением того, что в начале с помощью вызова функции change-which-bit оно определяет, какой из источников схемы должен поменять входящий сигнал, и меняет его. После этого правило получает результат работы логической схемы и сохраняет его в соответствующем факте. Кроме того, правило увеличивает число итераций на единицу. Правило выполняется до тех пор, пока число итераций не достигнет предельного значения. Еще одним условием выполнения правила является то, что одна итерация уже была совершена (число итераций не равно 0).
Пример 14.15. Правило marge-responses
(defrule merge-responses
(declare (salience 10))
?fl <- (result $?b ?x $?e ?response)
?f2 <- (result $?b ~?x $?e ?response)
=>
(retract ?fl ?f2)
(assert (result ?b * ?e ?response))
)
Правило merge-responses предназначено для оптимизации вычисляемой таблицы истинности и имеет более высокий приоритет, поэтому выполняется сразу после того, как в системе появятся два факта, удовлетворяющие заданной маске.
Пример 14.16. Правило print-header
(defrule print-header
(declare (salience -10) )
=>
(do-for-all-instances ((?x SOURCE)) TRUE
(format t " %3s " (sym-cat ?x)))
(printout t " │ ")
(do-for-all-instances ((?x LED)) TRUE
(format t " %3s " (sym-cat ?x)))
(format t "%n")
(do-for-all-instances ((?x SOURCE)) TRUE
(printout t "------- ") )
(printout t "- + -")
(do-for-all-instances ((?x LED)) TRUE
(printout t "------- "))
(format t "%n")
(assert (print-results))
)
Приведенное выше правило print-header предназначено для вывода на экран заголовка таблицы истинности. Затем правило добавляет в систему факт print-results, активизирующий правило print-result. Заголовок содержит список всех источников системы и список индикаторов, разделенных вертикальной чертой. Кроме того, для большего удобства восприятия правило отделяет заголовок таблицы от ее содержания дополнительной строкой. Это правило имеет более низкий приоритет, чем остальные правила экспертной системы, и не имеет явных условных элементов. Поэтому выполняется только после завершения перебора всевозможных комбинаций входных сигналов логической схемы.
Дата добавления: 2021-12-14; просмотров: 258;