1

再帰 verif(X1,Y1,F) 内にいくつかの述語があります。最初の述語は gen(X1,Y1,X2,Y2) で、X1 と Y1 を受け取り、数値 X2 と Y2 を生成します。他の述語は、検証したいものです。この述語の 1 つが F=1 を返す場合、verif(X2,Y2,F) でループを再開する必要がありますが、これを行う方法がわかりません。すべての述語が F=0 を返す場合、再帰は終了します。次に例を示します。

 verif(X1,Y1,0).

 verif(X1,Y1,F):-
                  gen(X1,Y1,X2,Y2),
                  pred1(X2,Y2,A,B,F),
                  pred2(X2,Y2,C,D,F),
                  pred3(X2,Y2,E,G,F),
                  verif(X2,Y2,F).

問題は、3 つの述語が F に対して異なる値を返す場合に失敗することです。1 つの方法は、どの述語も失敗しなくなるまで述語を繰り返すことですが、この方法では述語 gen(X1, Y1, X2, Y2) は常に同じ X1 と Y1 を受け取るため、常に同じ X2 と Y2 を生成します。

4

1 に答える 1