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
的父母。
答案 0 :(得分:2)
制作两个单独的谓词。首先,您定义一个列出事实的谓词:
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).