0

以下のような家系図があります。

Dasarath - Kousalya
         |
       Raam         -        Sita
                    |
                Lava, Kusa

そして、私は私の事実を次のように持っています:

male("Dasarath").
male("Raam").
male("Lava").
male("Kusa").

female("Kousalya").
female("Sita").

child("Raam", "Dasarath").
child("Raam", "Kousalya").
child("Lava", "Raam").
child("Lava", "Sita").
child("Kusa", "Raam").
child("Kusa", "Sita").

そして、親を定義するルールがあります。

parent(ParentName, ChildName) :- child(ChildName, ParentName).

そして、父と母を定義するためのルールも。

father(FatherName, ChildName) :- parent(FatherName, ChildName), male(FatherName).
mother(MotherName, ChildName) :- parent(MotherName, ChildName), female(MotherName).

兄弟のルールを次のように定義すると、問題が発生します

brother(BrotherName, PersonName) :- father(ParentName, BrotherName), father(ParentName, PersonName),
                                      male(BrotherName), not BrotherName = PersonName.

クエリを使用して実行します

brother(BrotherName, PersonName)

結果は次のようになります

brother(BrotherName, PersonName)
BROTHERNAME = "Lava".
PERSONNAME = "Kusa".

BROTHERNAME = "Kusa".
PERSONNAME = "Lava".

2 Solutions

このクエリの結果を 1 つだけ持ってくるように求められました。正しい質問を検索できません。解決策がある場合は、それを提供するか、Prolog がこのように機能する理由を教えてください。

4

1 に答える 1