Пример 9.7. Правило determine-rotation-state

(defrule determine-rotation-state ""

(working-state engine does-not-start)

(not (rotation-state engine?))

(not (repair?))

=>

(if (yes-or-no-p "Does the engine rotate (yes/no)? ")

then

(assert (rotation-state engine rotates))

(assert (spark-state engine irregular-spark))

else

(assert (rotation-state engine does-not-rotate))

(assert (spark-state engine does-not-spark)))

Это правило выполняется, в случае если общее состояние двигателя опреде­лено и известно, что он не заводится. Кроме того, условный элемент (not (rotation-state engine?)) гарантирует, что это правило еще не вызыва­лось. В зависимости от того или иного ответа пользователя правило добав­ляет соответствующий набор фактов (см. правило 4).

Далее реализуем довольно простые правила 5 и 6. Выполняемые ими дейст­вия вы поймете без дополнительных комментариев.

Пример 9.8. Правила determine-gas-level и determine-battery-state

(defrule determine-gas-level ""

(working-state engine does-not-start)

(rotation-state engine rotates)

(not (repair?))

=>

(if (not (yes-or-no-p "Does the tank have any gas in it (yes/no)? "))

then

(assert (repair "Add gas.")))

)

(defrule determine-battery-state ""

(rotation-state engine does-not-rotate)

(not (charge-state battery?))

(not (repair?))

=>

(if (yes-or-no-p "Is the battery charged (yes/no)? ")

then

(assert (charge-state battery charged))

else

(assert, (repair "Charge the battery."))

(assert (charge-state battery dead)))

)

Обратите внимание, что правило determine-battery-state, помимо опреде­ления возможной неисправности, также применяется для добавления в сис­тему факта, описывающего текущее состояние аккумулятора, который мо­жет быть использован другими правилами.

При реализации правила 7 необходимо обратить внимание на то, что реко­мендации, предоставляемые этим правилом, подходят для двух в корне от­личающихся ситуаций. Во-первых, в случае если двигатель не заводится, и существует вероятность плохой искры в системе зажигания (правило 7). Во-вторых, в случае если двигатель запускается, но не развивает нормальной мощности (правило 12). Поэтому выполним реализацию этих правил так, как представлено в примере 9.9.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: