2016-10-13 5 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)1つのルールだけで集中と内部管理が

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

おそらくあなたの答えは "それが依存" ですが、私はしたいのですが私より経験が豊富な人から、どのような解決策がより管理しやすいプロジェクトにつながるかを知ることができます。

は、同様のルールを維持する ニック

答えて

1

理由をありがとう分離:

  1. ルールは、異なるユーザによって書かれたまたは維持されています。
  2. 要件は、より簡単に別のルールにマップするロジックの個別の単位として指定されます。
  3. ルールは頻繁に追加/削除/有効/無効になります。
  4. ルールの条件は一般化できますが、ルールアクションは特定、多数、および/または複雑です。

条件とアクションの両方を一般化することができれば、ルールを分けておく理由が他にない場合は、ルールの数を減らすほうが維持しやすくなります。例:

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