6

私はプロローグを始めたばかりで、2 人がいとこであるかどうかのルール ステートメントを作成したいと考えています。

これは私の現在のコードです。or演算子が必要な場所に「または」を追加しました。

cousins(E, F) :- siblings(A, C) or siblings(A, D) or siblings(B, C) or siblings (B, D), parent(A, E), parent(B, E), parent(C, F), parent(D, F).

合格するには 1 つだけが必要ですsiblings()が、すべてparent()合格する必要があります。

4

1 に答える 1

7

Prolog では、「or」演算子は;です。または、述語に異なる句を使用することで実現できます。

最初の選択肢が成立した場合に何が起こるか見てみましょう:

cousins(          E, F):- 
  siblings(A, C), 
  parent(  A,     E), 
  parent(  B,     E), 
  parent(     C,     F), 
  parent(     D,     F).

または、2 番目が成り立つ場合はどうなりますか?

cousins(          E, F) :- 
  siblings(A, D), 
  parent(  A,     E), 
  parent(  B,     E), 
  parent(     C,     F), 
  parent(     D,     F).

3 番目と 4 番目も同様です。

cousins(E, F) :- siblings(B, C), 
  parent(A, E), parent(B, E), parent(C, F), parent(D, F).

cousins(E, F) :- siblings (B, D), 
  parent(A, E), parent(B, E), parent(C, F), parent(D, F).

これで、「or」条件が 4 つの句で表現されました。

しかし、多くの重要な詳細を省略したに違いありません。おそらく 2 組の親が必要なので、不等式を追加する必要があります:parent(A, E), parent(B, E), A \= Bなど。3節と4節も同様。各ペアの 1 つだけを残すだけで十分です。

しかし、なぜ人の両親を知る必要があるのでしょうか? あなたは本当にそうしません。それが母親であろうと父親であろうと、何が問題なのですか?そうではありません。したがって、最終的には、1 つの句だけで十分です。

cousins(            E, F):- 
    siblings(A, C), 
    parent  (A,     E), 
    parent(     C,     F).

あなたはまだいくつかの退化したケースをチェックする必要があるので、人を自分のいとこであると宣言することは決してありません.

于 2013-04-18T14:47:32.697 に答える