Graph Prolog编程中的图

Graph Prolog编程中的图,graph,prolog,Graph,Prolog,我是Prolog编程新手,我试图检查一个图是否有欧拉回路。我有以下图形表示和代码: find_e_circuit(G, Circuit) :- member(V-_Edges, G), find_e_circuit(G, V, [], RevCircuit), reverse(RevCircuit, Circuit), countEdges(G, S), length(RevCircuit,S)

我是Prolog编程新手,我试图检查一个图是否有欧拉回路。我有以下图形表示和代码:

 find_e_circuit(G, Circuit) :-
        member(V-_Edges, G), 
        find_e_circuit(G, V, [], RevCircuit),
        reverse(RevCircuit, Circuit),
        countEdges(G, S),
        length(RevCircuit,S)
        writeln("Found an eulerian circuit: ").
    
    find_e_circuit(G,V,SeenVs,Circuit) :-
      (   memberchk(V,SeenVs)
      ->  Circuit=[V|SeenVs]
      ;   member(V-Edges,G),
          member(Vedge,Edges),
          find_e_circuit(G,Vedge,[V|SeenVs],Circuit) 
      ).
    ?- find_e_circuit([1-[2],2-[3],3-[4],4-[1]],Circuit)

上面的图可以使用该图,但如果我尝试使用[1-[2],2-[3],3-[4],4-[1],5-[4]]它仍然输出(电路=[5,4,1,2,3,4]),但它不应该输出。CountEdge统计图形中的边数。有人能告诉我如何更正以上内容,使其可以很好地打印出来吗?如何检查每个边是否只访问一次?提前感谢。

我如何检查每个边缘是否只访问了一次?
您可以在单独的数据结构中保存一个记录。知道如何做吗?由于我刚刚开始编写Prolog,所以很难做到这一点,实际上也很难让它正常工作,因为我不知道Prolog中有多少东西是认真的。只要开始阅读每一个问题,你们就会发现数百个类似的问题和答案。