我在 Prolog 中遇到以下问题,例如,我在知识库中有几个事实:
flight(rome,london,ba,1500,150,400).
flight(london,newyork,airfrance,600,60,200).
flight(rome,paris,airfrance,1200,120,500).
flight(paris,newyork,airfrance,600,60,200).
flight(newyork,london,ba,1500,240,300).
我只对获取从 X 到 Y 的所有可能路线的列表感兴趣。我知道我必须使用递归规则,并且必须将访问过的地方添加到列表中以停止循环反复运行作为飞行路径在知识库中有几个循环。
到目前为止我所拥有的是:
flight_route(X,Y):-
flight(X,Y,A,B,C,D).
trip(X,X,[]).
trip(X,Z,T) :-
flight_route(Y,Z),
not(member(Y,T)),
trip(X,Y,[Y|T]).
出于某种原因,当我查看跟踪时,规则在尝试检查 not(member(Y,T)) 时失败,但我不明白为什么会这样。