2016-12-02 6 views
0

CLIPSを使用してファミリーツリープログラムを作成しようとしています。Defrule CLIPSで類似の事実を無視する

私は非常にCLIPSに慣れていて、デフルールのいずれかでいくつかの操作で困難に直面しています。

私が実行しようとしている操作は、お互いの兄弟である子供のための事実を作成することです。だから、子供のペアごとに、私はこのプログラムが2つの新しい兄弟の事実を生成すると期待しています。プログラムは4を生成するようだが - それは、自身の兄弟としてそれぞれの子をリストもだ...

私は解決策をグーグルでみましたが、私は(場合に発生しないようにコンピュータを依頼する方法を見つけ出すことができませんでした?cn ==?sn)。

誰かが助けてくれますか?

(deftemplate siblings 
    (slot subject-name) 
    (slot sibling-name) 
) 

(defrule set-siblings 
    (child 
     (child-name ?cn) 
     (parent-name ?p)) 
    (child 
     (child-name ?sn) 
     (parent-name ?p)) 
    => 
    (assert (siblings 
      (subject-name ?cn) 
      (sibling-name ?sn)) 
) 

答えて

0

子の名前が一致するように、最初のパターンにバインド名前と異なっている必要があり、あなたの第二のパターンを変更します。

(defrule set-siblings 
    (child 
     (child-name ?cn) 
     (parent-name ?p)) 
    (child 
     (child-name ?sn&~?cn) 
     (parent-name ?p)) 
    => 
    (assert (siblings 
      (subject-name ?cn) 
      (sibling-name ?sn)) 
) 
+0

ありがとうございました!それは助けになった!^_^ この論理操作がどのように機能するのか教えていただけますか? –

+0

パターン制約については、「Basic Programming Guide」のセクション5.4、http://clipsrules.sourceforge.net/documentation/v630/bpg.pdfで説明されています。 –

+0

ありがとうございました!^_ ^ –

関連する問題