0
나는 프롤로그 술어가 :Prolog에서주기를 확인하는 방법은 무엇입니까?
gen(c1, c2).
gen(c2, c1).
gen(c2, c3).
gen(c3, c1).
내가 세대/2 술어에는주기가 없는지 확인하는 규칙을 작성합니다. 이 규칙을 어떻게 작성해야합니까?
나는 프롤로그 술어가 :Prolog에서주기를 확인하는 방법은 무엇입니까?
gen(c1, c2).
gen(c2, c1).
gen(c2, c3).
gen(c3, c1).
내가 세대/2 술어에는주기가 없는지 확인하는 규칙을 작성합니다. 이 규칙을 어떻게 작성해야합니까?
처음에는 위에서 아래로 살펴 봅니다.
주기가 없다는 것은 무엇을 의미합니까?
~ 모든주기가 틀립니다.
어떤주기가 있습니까?
~ 다른 노드를 통해 한 노드에서 같은 노드로 이동할 수 있습니다.
다른 노드를 통해 동일한 노드로 이동할 수 있는지 어떻게 확인할 수 있습니까?
는 ~ 내가 시작 하나에서 이동 한 것보다 나는이 노드 (에서 보관할 수 있으며, 이미 목록에있는 노드를 추가하지 않는 다른 노드를 추가 할 수 있습니다, 빈리스트 노드에 추가 !!!! !!!!!)
node(X) :-
gen(X,_) ; gen(_,X).
canGoTo(X,N, Nodes) :-
member(X2, [X|Nodes]), gen(X2, X1),
\+ member(X1, Nodes),
canGoTo(X, N, [X1|Nodes]).
canGoTo(_,N,N).
canGoTo(X,Nodes) :- canGoTo(X,Nodes,[]).
canGoToSelf(X) :- canGoTo(X,Nodes), member(X,Nodes),!.
isCycle() :- node(X) , canGoToSelf(X),!.
noCycles() :- \+ isCycle().