Prolog 打印图形的欧拉路径

Prolog 打印图形的欧拉路径,prolog,Prolog,我对Prolog完全不熟悉,但我必须做这个作为家庭作业。在入口处给出一个无向相干图。用Prolog编写程序,打印出该图的欧拉圆。谢谢你的回答。例如,我有这样的优势: edge(a,b). edge(b,e). edge(a,c). edge(c,d). edge(e,d). 这是一个,;不一定是圆 eulerpath(E, Cs) :- setof(A-B, call(E, A,B), ABs), edges_path(ABs, Cs). edges_path([], [_]).

我对Prolog完全不熟悉,但我必须做这个作为家庭作业。在入口处给出一个无向相干图。用Prolog编写程序,打印出该图的欧拉圆。谢谢你的回答。例如,我有这样的优势:

edge(a,b).
edge(b,e).
edge(a,c).
edge(c,d).
edge(e,d).
这是一个,;不一定是圆

eulerpath(E, Cs) :-
   setof(A-B, call(E, A,B), ABs),
   edges_path(ABs, Cs).

edges_path([], [_]).
edges_path(ABs0, [X,Y|Xs]) :-
    select(A-B,ABs0,ABs),
    ( A = X, B = Y ; B = X, A = Y ),
    edges_path(ABs, [Y|Xs]).


?-  eulerpath(edge, Cs).
Cs = [a, b, e, d, c, a] ;
Cs = [b, a, c, d, e, b] ;
Cs = [a, c, d, e, b, a] ;
Cs = [c, a, b, e, d, c] ;
Cs = [b, e, d, c, a, b] ;
Cs = [e, b, a, c, d, e] ;
Cs = [c, d, e, b, a, c] ;
Cs = [d, c, a, b, e, d] ;
Cs = [e, d, c, a, b, e] ;
Cs = [d, e, b, a, c, d] ;
false.

你有具体的问题吗?你有什么不舒服的地方吗?您尝试过什么?选择
select/3
的含义是。尝试
?-选择(X,[1,2],Xs)。
如第5.4页所示。您使用的是什么“另类”系统?几乎任何其他系统都可以。我刚和你核对过。