2013-03-10 1 views
0

기술 자료를 만들려고합니다. 내 문제는 terminal/1connected/2 가지고 있는데 다음과 같은 규칙을 정의 :프롤로그에서 commutativity 구현 시도

지금 (내가 생각하는) 이해 이유로
connected(X,Y) :- connected(Y,X). 

, 이것은 무한 재귀 들어갔다.

그럼 검색해 보았는데 다음 질문을 발견했습니다 : Alternative to express "Commutativity" in Prolog? . 제공되는 응답에 따라, 나는 다음에 내 위의 사실을 변경하려고 :

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y). 
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y). 

그러나, 이것은 나에게 내가 바라던 결과를 제공하지 않습니다. 규칙 connected(t1,t7)을 정의하면 connected(t7,t1) 질문을하면 yes을 받기를 희망합니다.

+0

SWI에서 '/ \'를 사용하고 있습니까? 이것은 오히려','이어야합니다. – false

+0

''슬래시를 슬래시 대신''을 의미합니까? – karancan

+0

예. '(',')/2'는 Prolog에서 결합됩니다. – false

답변

0

나는 이것을 알아낼 수 있었다. 그것이 나오는 것에 따라, 나는 또한 수정 된 질문을 할 필요가

is_connected(X, Y) :- connected(Y, X); connected(X, Y). 

:

connected(X, Y) :- is_connected(Y, X) /\ is_connected(X, Y). 
is_connected(X, Y) :- terminal(X) /\ terminal(Y) /\ connected(X , Y). 

에 :

나는이 변경되었습니다. connected(X,Y)을 묻는 대신, 이제 is_connected(X,Y)을 묻습니다.