4

叔母の関係がうまくいかない理由を誰か教えてもらえますか? 呼び出そうとするたびに false を返します。

その下に書いたおじさん関係がバッチリ効いているようです。違いがわかりません。最後に (not(mother(X,Y)). も試しましたが、何も変わりません。

/* FACTS */
parents(david, george, noreen).
parents(jennifer, george, noreen).
parents(georgejr, george, noreen).
parents(scott, george, noreen).
parents(joanne, george, noreen).
parents(jessica, david, edel).
parents(clara, david, edel).
parents(michael, david, edel).
parents(laura, georgejr, susan).
parents(anna, scott, siobhan).


/* Relationships */
father(X, Y) :- parents(Y, X, _).
male(X) :- father(X, _).

mother(X, Y) :- parents(Y, _, X).
female(X) :- mother(X, _).

grandfather(X, Y) :- father(X, Z), father(Z, Y).
grandfather(X, Y) :- father(X, Z), mother(Z, Y).

grandmother(X, Y) :- mother(X, Z), mother(Z, Y).
grandmother(X, Y) :- mother(X, Z), father(Z, Y).

brother(X, Y) :- male(X), father(Z, X), father(Z, Y).

sister(X, Y) :- female(X), father(Z, X), father(Z, Y).

aunt(X,Y) :- sister(X,Z), parents(Y, Z, _).
aunt(X,Y) :- sister(X,Z), parents(Y, _, Z).

uncle(X, Y) :- brother(X, Z), parents(Y, Z, _), not(father(X,Y)).
uncle(X, Y) :- brother(X, Z), parents(Y, _, Z), not(father(X,Y)).
4

3 に答える 3

3

簡単に言えば、 anuncleは機能しており (ある程度)、 は機能していないということです。これは、 andauntの定義が不十分であるためです。子供がいない限り、男性または女性を認識しません。あなたの一連の事実には、子供がいて、子供がいる兄弟がいる女性(名前で判断)はいません。おじのリストの中に現れてはならないのと同じ理由です。malefemalescott

これを修正するのは簡単です。

  1. 性別を推測するルールを削除し、代わりに性別を述べる、または
  2. parents事実をson/daughter事実 +規則に置き換え、parents誰かが誰かの娘であるという事実から性別を推測します。
于 2013-10-14T21:36:10.440 に答える
1

多くの冗長性と少なくとも奇妙なチェックメカニズムを導入しています。

fatherand関係は、関係を としてmother指定することを意味します。2 つのクエリを定義する理由がわかりません。parents/3parents(child,father,morther)

うまくいかないのは、兄と妹の関係が続くということbrother(X,X)です。でこれを回避できX \= Xます。これは基本的に叔母節で解決するものです。

さらに、追加情報を提供する必要があります。maleandの関係は、人物 ( ) に子供がいるfemale場合にのみ解決されます。Xただし、自分に子供がいない場合は、おばまたはおじになることは可能です。

これはうまくいくはずです:

/* FACTS */

parents(david, george, noreen).
parents(jennifer, george, noreen).
parents(georgejr, george, noreen).
parents(scott, george, noreen).
parents(joanne, george, noreen).
parents(jessica, david, edel).
parents(clara, david, edel).
parents(michael, david, edel).
parents(laura, georgejr, susan).
parents(anna, scott, siobhan).


/* Relationships */

parent(X,Y) :- parents(Y,X,_).
parent(X,Y) :- parents(Y,_,X).

father(X, Y) :- parents(Y, X, _).

male(michael).
male(X) :- father(X, _).

mother(X, Y) :- parents(Y, _, X).

female(joanne).
female(jessica).
female(jennifer).
female(clara).
female(laura).
female(anna).
female(X) :- mother(X, _).

grandfather(X, Y) :- father(X, Z), father(Z, Y).
grandfather(X, Y) :- father(X, Z), mother(Z, Y).

grandmother(X, Y) :- mother(X, Z), mother(Z, Y).
grandmother(X, Y) :- mother(X, Z), father(Z, Y).

brother(X, Y) :- male(X), father(Z, X), father(Z, Y), X \= Y.

sister(X, Y) :- female(X), father(Z, X), father(Z, Y), X \= Y.

aunt(X,Y) :- sister(X,Z), parent(Z,Y).

uncle(X, Y) :- brother(X, Z), parent(Z,Y).
于 2013-10-14T21:26:51.650 に答える