>>111
Prologでまったりスレでも何回となく示された述語先祖で考えてみます。
親子(為義,義朝).
親子(義朝,頼朝).
の関係が定義されている時、先祖関係は、

先祖(A,B) :- 親子(A,B).
先祖(A,B) :- 親子(A,C),先祖(C,B).

で定義できます。
これは 為義 --- 義朝 --- 頼朝 の関係ですが、
これを 為義 --- 義朝 --- 義平
       |- 為朝 |- 頼朝 --- 範頼
と定義し直します。
親子(為義,義朝).
親子(為義,為朝).
親子(義朝,義平).
親子(義朝,頼朝).
親子(頼朝,範頼). ですね。先祖関係の定義もちょっとだけ手を入れて、
先祖(A,B) :- 親子(A,B),write_formatted('%t-%t\n',[A,B]),!.
先祖(A,B) :- 親子(A,C),write_formatted('%t-%t\n',[A,C]),先祖(C,B). ここで、

?- 先祖(為義,範頼). を実行してみます。
為義-義朝
義朝-義平
義朝-頼朝
頼朝-範頼
yes で終了となります。あとで続きを書きます。