1

(非常に) 奇妙な話: 私は娘 (D) を持つ未亡人 (W) と結婚しました。私の父(F)は継娘(D)と結婚しました。私の妻は息子(s1)を出産しました。父の妻(継娘)にも息子(s2)がいました。

このプロジェクトの目標は、入力することです。

grandfather(i,i).

yesプロローグに戻ります。

これが私がこれまでに持っているものです:

%facts

father(f,i).

husband(i,w).

husband(f,d).

mother(w,d).

mother(w,s1).

father(i,s1).

mother(d,s2).

father(f,s2).

%rules

father(X,Y) :- f_in_law(X,Y).

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

f_in_law(X,Y) :- husband(Z,Y),father(X,Z).

b_in_law(X,Y) :- husband(Z,Y),brother(X,Z).

%brother(X,Y) :- b_in_law(X,Y).

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

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

私はそれをたどって、何が間違っていたのかを確認しました。father(f,i)本当だからいい!しかしfather(i,f)、間違っていると考えられています。これを修正する方法に関する提案/アイデアはありますか? 私はプロローグにかなり慣れていないので、どんな意見でも感謝します。

4

2 に答える 2

1

述語は

f_in_law(X,Y) :- husband(Y,Z),father(X,Z).

それ以外の

f_in_law(X,Y) :- husband(Z,Y),father(X,Z).
于 2013-02-25T09:24:09.680 に答える
0

なぞなぞを再構成しました

father(i, s1).
father(f, i).
father(f, s2).

fatlaw(X, Y) :- husband(X, Z), mother(Z, Y).

mother(w, d).
mother(w, s1).
mother(d, s2).

motlaw(X, Y) :- husband(Z, X), father(Z, Y).

husband(i, w).
husband(f, d).

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

要点は、祖父は偽の生物学的子孫を受け入れなければならないということのようです (これが合理的な英語であることを願っています)。

それと

?- grandfather(X,X).
X = i ;
false.
于 2013-02-25T11:02:39.487 に答える