3

この基本的な Prolog の概念を理解するのに苦労しています。

人の祖先を決定するための基本的な条項は次のとおりであると理解しています。

ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

ただし、リストを実装して親の子を決定するプロローグプログラムでこれがどのように機能するかを理解しようとしています。

parent_of(simon, [matthew, andrea, joanne]).

誰かが誰かの父親であるかどうかを判断するために、私は完全に機能するこれを使用しています:

father_of(X, Y) :- parent_of(X, List), my_member(Y, List), male(X).

ただし、これを上記の先祖節で機能させる方法がわかりません。

4

1 に答える 1

4

member/2 要素とリストの間のより単純な関係です:

ancestor_of(X, Y) :- parent_of(X, Ys), member(Y, Ys).
ancestor_of(X, Y) :- parent_of(X, Zs), member(Z, Zs), ancestor_of(Z, Y).

推移ルールをテストするための関係を追加しました

parent_of(simon, [matthew, andrea, joanne]).
parent_of(andrea, [bill, joan]).

収量

?- ancestor_of(andrea,A).
A = bill ;
A = joan ;
false.

?- ancestor_of(simon,A).
A = matthew ;
A = andrea ;
A = joanne ;
A = bill ;
A = joan ;
false.

?- ancestor_of(X,bill).
X = andrea ;
X = simon ;
false.
于 2013-03-13T15:04:38.023 に答える