How to create a rule that makes all relations symm

2020-07-17 02:29发布

问题:

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, !.


标签: prolog