ВУЗ:
Составители:
Рубрика:
 (spark-state engine does-not-spark) 
 (charge-state battery charged) 
 (not (repair ?)) 
 => 
 (if (yes-or-no-p "Is the conductivity test for the ignition coil positive (yes/no)? ") 
  then 
  (assert (repair "Repair the distributor lead wire.")) 
  else 
  (assert (repair "Replace the ignition coil.")))) 
(defrule determine-sluggishness "" 
 (working-state engine unsatisfactory) 
 (not (repair ?)) 
 => 
 (if (yes-or-no-p "Is the engine sluggish (yes/no)? ") 
  then (assert (repair "Clean the fuel line.")))) 
 (defrule determine-misfiring "" 
 (working-state engine unsatisfactory) 
 (not (repair ?)) 
 => 
 (if (yes-or-no-p "Does the engine misfire (yes/no)? ") 
  then 
  (assert (repair "Point gap adjustment."))   
  (assert (spark-state engine irregular-spark))))  
 (defrule determine-knocking "" 
 (working-state engine unsatisfactory) 
 (not (repair ?)) 
 => 
 (if (yes-or-no-p "Does the engine knock (yes/no)? ") 
  then 
  (assert (repair "Timing adjustment.")))) 
Внимательно взглянув на список правил, мы увидим, что некоторые правила (2, 3 и 13) остались до сих пор нереализо-
ванными. 
Реализация правила 13 будет следующая. 
(defrule no-repairs "" 
 (declare (salience –10)) 
 (not (repair ?)) 
 => 
 (assert (repair "Take your car to a mechanic."))) 
Обратите внимание на использование приоритета при определении этого правила. Все правила, приведенные в преды-
дущем разделе, определялись с приоритетом, по умолчанию равным нулю. Использование для правила no-repairs приорите-
та, равного –10, гарантирует, что правило  не будет выполнено,  пока в  плане решения задачи находится, по крайней мере, 
одно из диагностических правил. Если все активированные диагностические правила опрошены и ни одно из них не смогло 
подобрать подходящую рекомендацию по устранению неисправности, то система запустит данное правило, рекомендующее 
пользователю обратиться к механику. 
Реализация правил 2 и 3 приведена ниже. 
(defrule normal-engine-state-conclusions "" 
 (declare (salience 10)) 
 (working-state engine normal) 
 => 
 (assert (repair "No repair needed.")) 
 (assert (spark-state engine normal)) 
 (assert (charge-state battery charged)) 
 (assert (rotation-state engine rotates))) 
(defrule unsatisfactory-engine-state-conclusions "" 
 (declare (salience 10)) 
 (working-state engine unsatisfactory) 
 => 
 (assert (charge-state battery charged)) 
 (assert (rotation-state engine rotates))) 
В этих правилах, наоборот, используется более высокий приоритет, что гарантирует их выполнение до запуска любого 
диагностирующего правила (в случае выполнения соответствующих условий). Это избавит нашу систему от лишних прове-
рок, а пользователя от лишних вопросов. 
