我在递归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。
答案 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)).