以下のような家系図があります。
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 がこのように機能する理由を教えてください。