2014-11-30 6 views
1

이항 관계가 있고 모든 이진 관계가 대칭이면 결과를 true로 설정하고 그렇지 않으면 false를 얻고 싶습니다.Prolog - 이진 관계가 대칭 일 경우 true

married(mary, tom). 
married(sam, linda). 
married(linda, sam). 

spouse(X, Y) :- married(X, Y), married(Y, X). 

결과이 인 경우 : 지금까지 나는 이것을 가지고

?- spouse(X, Y). 
X = sam, 
Y = linda ; 
X = linda, 
Y = sam ; 
false. 

하지만 더 이진 관계가 결혼 없기 때문에 잘못된 결과를 얻을하려는이 경우 (톰, 메리) (따라 포뮬

∀x, y : xRy⇒yRx). 나는이 이진 관계가있을 때 그리고 다른 한편으로는, :

married(tom, mary). 
married(mary, tom). 
married(sam, linda). 
married(linda, sam). 

을 나는 이진 관계가 대칭이기 때문에 참으로 결과를 얻으려면. 어떻게해야합니까? SWI-Prolog를 사용하고 있습니다.

답변

3

모든 이진 관계가 대칭이면 결과를 참이고 그렇지 않으면 거짓 결과를 얻고 싶습니다. 두 번째의 경우

?- all_relations_symmetric. 
false. 

:

?- all_relations_symmetric. 
true. 
첫 번째 예를 들어

all_relations_symmetric :- not(some_relations_not_symmetric). 
some_relations_not_symmetric :- married(X, Y), not(married(Y, X)).