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).这是我的prolog文件,我需要的是找到所有不相关的人对,但我不知道如何找到。
发布于 2011-03-21 19:20:35
你得想个办法先把所有人都吸引过来。
person(X) :- parent(X, _).
person(X) :- parent(_, X).然后使用setof/3获取没有重复项的人员列表:
setof(X, person(X), People)并从中收集所有配对:
pair_of_people(X,Y) :-
setof(P, person(P), People),
member(X, People),
member(Y, People),
X \= Y.顺便说一句,这会产生“镜像”对:所有X和Y的(X,Y)和(Y,X)对。您可以使用许多Prolog支持的经过调整的member版本来做得更好。查看你的Prolog手册。
最后,过滤掉为related的对
unrelated(X,Y) :-
pair_of_people(X,Y),
not(related(X,Y)).https://stackoverflow.com/questions/5375142
复制相似问题