当调用失败时,Prolog开始回溯。在某些情况下,可能需要初始化回溯的性能以找到其他解决方案。Prolog有一个特殊的谓词
任务是:确定a、b、c是N的除法器。例如:(a=2,b=3,c=4,N=2答案是a,c)。
所以,我写了以下代码:
PREDICATES
a(integer,integer)
m(integer,integer,integer,integer)
CLAUSES
a(X,N):-
0 = X mod N,
write(X).
m(A,B,C,N):-
a(A,N).
m(A,B,C,N):-
a(B,N).
m(A,B,C,N):-
a(C,N).
GOAL
m(2,3,4,2).
但是如果Prolog找到了第一个解决方案(在我的例子中是a=2),它就会停止并显示它。但是,在我的情况下,答案将是a=2,c=4。我的问题是"Prolog如何检查所有谓词"?
fail
,它调用不成功的完成,因此初始化退款。
所以,我重写了我的代码:
PREDICATES
a(integer,integer)
m(integer,integer,integer,integer)
CLAUSES
a(X,N):-
0 = X mod N,
write(X),nl.
m(A,B,C,N):-
a(A,N),fail.
m(A,B,C,N):-
a(B,N),fail.
m(A,B,C,N):-
a(C,N).
GOAL
m(2,3,4,2).