首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog -不相关的对

Prolog -不相关的对
EN

Stack Overflow用户
提问于 2011-03-21 16:06:01
回答 1查看 322关注 0票数 0
代码语言:javascript
复制
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文件,我需要的是找到所有不相关的人对,但我不知道如何找到。

EN

回答 1

Stack Overflow用户

发布于 2011-03-21 19:20:35

你得想个办法先把所有人都吸引过来。

代码语言:javascript
复制
person(X) :- parent(X, _).
person(X) :- parent(_, X).

然后使用setof/3获取没有重复项的人员列表:

代码语言:javascript
复制
setof(X, person(X), People)

并从中收集所有配对:

代码语言:javascript
复制
pair_of_people(X,Y) :-
    setof(P, person(P), People),
    member(X, People),
    member(Y, People),
    X \= Y.

顺便说一句,这会产生“镜像”对:所有XY(X,Y)(Y,X)对。您可以使用许多Prolog支持的经过调整的member版本来做得更好。查看你的Prolog手册。

最后,过滤掉为related的对

代码语言:javascript
复制
unrelated(X,Y) :-
    pair_of_people(X,Y),
    not(related(X,Y)).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5375142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档