Prolog在循环中验证谓词

时间:2013-11-09 15:16:39

标签: prolog

我在递归verif(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。

1 个答案:

答案 0 :(得分: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)).