首页 文章

Prolog在循环中验证谓词

提问于
浏览
1

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

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

    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)).
    

相关问题