问题
What I want is when I define:
marriedTo(martin, annie).
It also makes the following true:
marriedTo(annie, martin).
I have tried the following, but it's (obviously) an infinite loop.
marriedTo(X,Y) :- marriedTo(Y,X).
How would I do this in Prolog?
回答1:
The most simple way to solve it is:
marriedTo(martin, annie).
...
married(X,Y) :- marriedTo(X,Y).
married(X,Y) :- marriedTo(Y,X).
Then there are plenty of other ways, implementations and semantics that came up to solve the problem of infinite recursion...
回答2:
I figured it out after all:
marriedTo(X,Y) :- marriedTo(Y,Z), X = Z, !.
来源:https://stackoverflow.com/questions/14639317/how-to-create-a-rule-that-makes-all-relations-symmetric-in-prolog