2016-10-13 1 views
0

У меня вопрос о дизайне правил.CLIPS: наилучшая практика для дизайна правил

Какая из них - лучшая практика?

A) Дублирование правила:

(defrule set-temperature-in-winter 
    (season (is winter)) 
    => 
    ;;other logic) 


(defrule set-temperature-in-summer 
    (season (is summer)) 
    => 
    ;;other logic) 

B) Централизация только одно правило, и внутреннее управление

(defrule set-temperature 
     (season (is ?season)) 
     => 
     (if (eq ?season winter) then ;;other logic) 
     (if (eq ?season summer) then ;;other logic) 
     ) 

Возможно, ваш ответ "это зависит от", но я хотел бы знайте у людей, более опытных, чем я, какое решение приводит к более управляемому проекту.

Спасибо, Nic

ответ

1

причин, чтобы сохранить аналогичные правила разделения:

  1. Правила, написанные или поддерживаемые различными пользователями.
  2. Требования указаны как отдельные единицы логики, которые легче сопоставляются отдельным правилам.
  3. Правила часто добавляются/удаляются/включены/отключены.
  4. Условия правил могут быть обобщены, но действия правила являются конкретными, многочисленными и/или сложными.

Если вы можете обобщить как условия, так и действия, иметь меньшее количество правил легче поддерживать, если нет других причин для сохранения правил отдельно. Например:

(defrule set-temperature 
    (season (is ?season)) 
    (setting (for ?season) (temperature ?temp)) 
    => 
    (assert (set-temperature (value ?temp))))