无法获取序言图遍历的已访问节点中的第一个节点

Can not get first node in the visited nodes of prolog graph traversal

我找到了一个基于Prolog的寻路算法。

这是 graph_traversal.P 文件的内容。

path(X,Y,P) :- path_aux(X,Y,[Y],P).
path_aux(X,Y,L,[X|L]) :- arc(X,Y).
path_aux(X,Y,L,P) :- arc(Z,Y), not(member(Z,L)), path_aux(X,Z,[Z|L],P).

我以成对的形式提供了弧线列表。当我使用以下行查询时

command = "path(" + start + "," + end+ ", P)"
for item in prolog.query(command):
  print("item", item)

我在项目 var

中得到了这样的东西

Start: Middle0, [Middle1, Middle 2, ..., End]

我希望有这样的东西

[Start, Middle0, Middle1, Middle 2, ..., End]

我不懂Prolog,但我必须解决这个问题。你能帮我解决这个问题吗?

下面几行解决了问题。

path(A,B,Path) :- 
   travel(A,B,[A],Q), 
   reverse(Q,Path).

travel(A,B,P,[B|P]) :- 
   arc(A,B).
travel(A,B,Visited,Path) :- 
   arc(A,C), 
   C \== B, 
   \+member(C,Visited), 
   travel(C,B,[C|Visited],Path).