このディレクトリの索引

#  We are given a graph with the following facts:
#  
#  edge(a,b)
#  edge(a,c)
#  edge(b,a)
#  edge(c,d)
#  edge(d,d)
#  edge(d,e)
#  edge(e,f)
#  edge(f,g)
#  edge(g,e)
#  And we are asked to define a rule, cycle(X), that determines if there is a cycle starting from the node X.
#  
#  I am really lost on how to do this, I tried attempting to traverse the nodes and checking if the next one would be the starting one again but I cannot seem to get it to work

端点(a,b)
端点(a,c)
端点(b,a)
端点(c,d)
端点(d,d)
端点(d,e)
端点(e,f)
端点(f,g)
端点(g,e)


サイクル(X) :-
        setof(_出発点,[_出発点,_到着点] ^ 端点(_出発点,_到着点),_出発点集合),
        member(_出発点,_出発点集合),
        到着点が出発点として既に現れている端点を探す(_出発点,[],X).

到着点が出発点として既に現れている端点を探す(_出発点,L,X) :-
        端点(_出発点,X),
        member(X,L),!.
到着点が出発点として既に現れている端点を探す(_出発点,L1,X) :-
        端点(_出発点,_到着点),
        到着点が出発点として既に現れている端点を探す(_到着点,[_出発点|L1],X).