(>>103の続き)

では、以降からは知識ベースの記述を始めます。まず基礎のファクトを書きます。

 人物(為義).      % 為義という人物が存在する。
 人物(義朝).      % 義朝という人物が存在する。
 人物(頼朝).      % 頼朝という人物が存在する。

ここで、「親-子」と「先祖-子孫」を(関係ではなく)エンティティとして認識した上で、
ファクトとして書いてみます。

 関係(親_子).       % 親-子という関係が存在する。
 関係(先祖_子孫).     % 先祖-子孫という関係が存在する。
 関係(親_子, 為義, 義朝). % 為義と義朝の間には親-子という関係が存在する。
 関係(親_子, 義朝, 頼朝). % 義朝と頼朝の間には親-子という関係が存在する。

これらファクトを前提にルールを書きます。

 関係(先祖_子孫, A, B) :- 人物(A), 人物(B), A¥=B, 関係(親_子, A, B).
  % あるA, Bについて、AおよびBという人物が存在し、
  % かつAとBの間に親-子という関係が存在するならば、
  % AとBの間には先祖-子孫という関係が存在する。

 関係(先祖_子孫, A, B) :-
    人物(A), 人物(B), 人物(C), A ¥= B, B ¥= C, A ¥= C,
    関係(親_子, A, C), 関係(先祖_子孫, C, B).
  % あるA, Bについて、A、BおよびCという人物が存在し、
  % かつAとCの間に親-子という関係が存在し、
  % かつCとBの間に先祖-子孫という関係が存在するならば、
  % AとBの間にも先祖-子孫という関係が存在する。

(まだ続く)