我正在尝试探索可能有循环的图形,因此我必须将已经“访问”过的节点放入数组中。
问题是Prolog告诉我成员(Y,Ys)是真的,因此谓词失败了......
我知道存在一些 tauReachable(X,Defs,[Y|Ys]) :-
trans(X,tau,Defs,Y),
not(member(Y,Ys)),
tauReachable(X,Defs,Ys).
tauReachable(_X,_Defs,[]) :- !.
成立的数组,但为什么Prolog不会搜索其他解?
List<Images>
(trans:X是初始节点,tau是弧标签,Defs没什么重要,Y是到达节点)
答案 0 :(得分:0)
我已经这样做了:
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).