2016-12-21 8 views
0

私はそれが(例えば)新しい事実を作成するたびにユーザーが質問を応答するエキスパートシステムを作成しようとしています:クリップ:間の事実を比較互いに

assert(like accion yes) 
assert(like multi yes) 

を、その、それ、やったらそれは

(deffacts gaming (game Call_of_Duty multi accion) 
(game BattleField multi strategy)) 

私はこのルールを使用してみました、すべての「のような、実際には」「ゲーム-事実」especificの内側に配置されている場合、私はチェックしますが、:その説明には、これらの事実を持っているすべてのゲームの名前が表示されます動作しません:

(defrule conclusion 
    (like $?x yes) 
    (game ?y $?x2) 
    (test(member$ ?x ?x2)) 
    => 
    (printout t "You like the game: " ?y crlf)) 

答えて

0

ルールを書く方法は3通りあります。あなたの元のルール、結論-1は、各ゲームのために複数のプリントを得ることができるように、ゲームにマッチするようなそれぞれのメッセージを印刷します。ルールの結論 - 2はゲームに一致するものが少なくとも1つあればゲームを印刷します。ほとんどの場合、一度印刷されたゲームが表示されます。ルールの結論 - 3は、そのゲームのすべてのように一致する場合にのみ、ゲームを印刷します。

CLIPS> 
(deffacts gaming 
    (like accion yes) 
    (like multi yes) 
    (game Call_of_Duty multi accion) 
    (game BattleField multi strategy)) 
CLIPS>  
(defrule conclusion-1 
    (like $?x yes) 
    (game ?y $?x2) 
    (test(member$ ?x ?x2)) 
    => 
    (printout t "1 You like the game: " ?y crlf)) 
CLIPS>  
(defrule conclusion-2 
    (game ?y $?x2) 
    (exists (like $?x yes) 
      (test (member$ ?x ?x2))) 
    => 
    (printout t "2 You like the game: " ?y crlf)) 
CLIPS>  
(defrule conclusion-3 
    (game ?y $?x2) 
    (forall (like $?x yes) 
      (test (member$ ?x ?x2))) 
    => 
    (printout t "3 You like the game: " ?y crlf)) 
CLIPS> (reset) 
CLIPS> (run) 
1 You like the game: BattleField 
2 You like the game: BattleField 
1 You like the game: Call_of_Duty 
1 You like the game: Call_of_Duty 
2 You like the game: Call_of_Duty 
3 You like the game: Call_of_Duty 
CLIPS> 
+0

ありがとう、本当に役に立ちました – Str8noobish