married(man, woman).
married(B, A) :-
married(A, B)
如果B
嫁给了A
,A
嫁给了B
.
我知道按照我的方式编写它会创建一个循环,但我不知道如何防止这种情况。
parent(Parent, Child) :-
parent(married(Parent, Spouse), Child).
我也无法做这样的事情。
如果Parent
是Child
:-
的父母,则Parent
的配偶是Child
的父母。
创建两个单独的谓词。首先,定义一个列出事实的谓词:
married_fact(philip, elisabeth).
married_fact(william, kate).
married(X, Y) :-
married_fact(X,Y).
married(X, Y) :-
married_fact(Y,X).
我也无法做这样的事情:
如果
Parent
是Child
的父级:-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).