1

我在递归验证(X1,Y1,F)中有一些谓词。第一个谓词是 gen(X1,Y1,X2,Y2),它接收 X1 和 Y1 并生成数字 X2 和 Y2。其他谓词是我要验证的谓词。如果其中一个谓词返回 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 返回不同的值时,它将失败。一种方法是使用谓词重复直到没有一个谓词失败,但这样谓词 gen(X1, Y1, X2, Y2) 将始终生成相同的 X2 和 Y2,因为它总是会收到相同的 X1 和 Y1。

4

1 回答 1

0

我认为您可以使用不同的变量,然后测试值

verif(X1,Y1,F):-
   gen(X1,Y1,X2,Y2),
   pred1(X2,Y2,A,B,F1),
   pred2(X2,Y2,C,D,F2),
   pred3(X2,Y2,E,G,F3),
   (( F1 == 0, F2 == 0, F3 == 0 ) -> true ; verif(X2,Y2,F)).

或更简单

verif(X1,Y1,F):-
   gen(X1,Y1,X2,Y2),
   pred1(X2,Y2,A,B,F1),
   pred2(X2,Y2,C,D,F2),
   pred3(X2,Y2,E,G,F3),
   (F1 + F3 + F3 =:= 0 -> true ; verif(X2,Y2,F)).
于 2013-11-09T16:05:50.227 回答