在Prolog中定义规则时遇到麻烦


married(man, woman).
married(B, A) :- 
married(A, B)

如果B嫁给了AA嫁给了B.
我知道按照我的方式编写它会创建一个循环,但我不知道如何防止这种情况。

parent(Parent, Child) :- 
parent(married(Parent, Spouse), Child).

我也无法做这样的事情。

如果ParentChild:-
的父母,则Parent的配偶是Child的父母。

创建两个单独的谓词。首先,定义一个列出事实的谓词:

married_fact(philip, elisabeth).
married_fact(william, kate).
married(X, Y) :-
married_fact(X,Y).
married(X, Y) :-
married_fact(Y,X).

我也无法做这样的事情:

如果ParentChild的父级:-Parent的配偶是Child的父母。

语法parent(married(Parent, Spouse), Child).没有多大意义,因为married(Parent, Spouse)在这里是一个函子。即使Prolog将其视为谓词,谓词也不会"返回"任何东西。谓词为真或假。

您可以定义parent_fact/2谓词:

parent_fact(phillip, charles).

然后定义一个谓词:

parent(Parent, Child) :-
parent_fact(Parent, Child).
parent(Parent, Child) :-
married(Parent, Spouse),
parent_fact(Spouse, Child).

最新更新