探索带循环的图形,发出成员谓词问题

时间:2017-04-30 12:30:04

标签: prolog

我正在尝试探索可能有循环的图形,因此我必须将已经“访问”过的节点放入数组中。 问题是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是到达节点)

1 个答案:

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