Prolog 探索带有循环的图,使用成员谓词发出问题
我试图探索一个可能有循环的图,所以我必须将我已经“访问”过的节点放入一个数组中。 问题是Prolog告诉我成员(Y,Ys)为true,因此谓词失败。。。 我知道存在一些数组,Prolog 探索带有循环的图,使用成员谓词发出问题,prolog,Prolog,我试图探索一个可能有循环的图,所以我必须将我已经“访问”过的节点放入一个数组中。 问题是Prolog告诉我成员(Y,Ys)为true,因此谓词失败。。。 我知道存在一些数组,member(Y,Ys)可以保存,但为什么Prolog不搜索其他解决方案呢 tauReachable(X,Defs,[Y|Ys]) :- trans(X,tau,Defs,Y), not(member(Y,Ys)), tauReachable(X,Defs,Ys). tauReachable(_
member(Y,Ys)
可以保存,但为什么Prolog不搜索其他解决方案呢
tauReachable(X,Defs,[Y|Ys]) :-
trans(X,tau,Defs,Y),
not(member(Y,Ys)),
tauReachable(X,Defs,Ys).
tauReachable(_X,_Defs,[]) :- !.
(trans:X是初始节点,tau是弧标签,def不重要,Y是到达节点)我是这样做的:
tauReachable(X,Defs,Y) :-
tauReachableR(X,Defs,Y,[X]),
!.
tauReachableR(X,Defs,Y,Z) :-
trans(X,tau,Defs,F),
not(member(F,Z)),
!,
append([F],Z,S),
tauReachableR(X,Defs,Y,S).
tauReachableR(X,Defs,Z,Z).