1

次の問題が発生しました。
次の事実と述語が定義されています。

father(avr, yit).
male(avr).
married(avr, sara).
father(yit, yaak).
married(rivka, yit).
father(yaak, yosef).
mother(rachel, yosef).
father(yaak, levi).
mother(leaa, levi).
mother(zilpa, gad).
father(yaak, dan).
mother(bilhaa, dan).
father(yosef, menashe).
father(yosef, ephraim).

are_married(X,Y) :- married(X,Y).
are_married(X,Y) :- married(Y,X).

次の述語を定義しました。

married(X,Y) :- mother(X,Z) , father(Y,Z).
mother(X) :- are_married(X,Y) , father(Y,_).

問題は、母親は結婚によって定義され、結婚は母親であることによって定義されるということです。その結果、無限ループが発生し、プログラムがクラッシュします。
どうすれば無限ループを防ぐことができますか? 別の述語を使用しないように述語に指示する方法はありますか?

4

1 に答える 1

1

なぜ母親を書き直す必要があるのですか?

スキップするだけ

mother(X) :- are_married(X,Y) , father(Y,_).

あなたはすでに母親として(データ定義)を持っているからです。

于 2013-05-02T12:44:38.767 に答える