Prolog-不相关的对
这是我的prolog文件,我需要的是找到所有不相关的人,我不知道如何找到。你需要一种先找到所有人的方法Prolog-不相关的对,prolog,Prolog,这是我的prolog文件,我需要的是找到所有不相关的人,我不知道如何找到。你需要一种先找到所有人的方法 parent(kresimir, jasna). parent(kresimir, darko). parent(vesna, darko). parent(darko, vigor). parent(darko, goran). parent(vigor, ruzica). parent(vigor, snjezana). parent(mario, nenad). ancestor(X,
parent(kresimir, jasna).
parent(kresimir, darko).
parent(vesna, darko).
parent(darko, vigor).
parent(darko, goran).
parent(vigor, ruzica).
parent(vigor, snjezana).
parent(mario, nenad).
ancestor(X, Y) :-
parent(X, Y).
ancestor(X, Y) :-
parent(X, Z),
ancestor(Z, Y).
related(X, Y) :-
parent(X,Y);
parent(Y,X).
related(X, Y) :-
X \= Y,
ancestor(Z, X),
ancestor(Z, Y).
然后使用以获取没有重复项的人员列表:
person(X) :- parent(X, _).
person(X) :- parent(_, X).
并从中收集所有对:
setof(X, person(X), People)
顺便说一下,这会产生“镜像”对:对于所有X
和Y
,都是(X,Y)
。使用许多序言支持的member
的改编版本,您可以做得更好。查看您的Prolog手册
最后,筛选出与相关的对
:
pair_of_people(X,Y) :-
setof(P, person(P), People),
member(X, People),
member(Y, People),
X \= Y.
unrelated(X,Y) :-
pair_of_people(X,Y),
not(related(X,Y)).