首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog中两个人的一种共同爱好

Prolog中两个人的一种共同爱好
EN

Stack Overflow用户
提问于 2022-02-02 16:19:56
回答 1查看 90关注 0票数 0

我发现了一个老问题( Prolog Predicate to return true when two people have same hobby ),用于编写一些代码,以便在使用dif的两个人之间找到相同的爱好。我有类似的情况,显示有相同爱好的两个人的名字,但是兴趣爱好元素被定义为一个列表。无论我尝试什么,似乎都不起作用,任何想法都会被感激。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
one_common_hobby(P1,P2):-
dif(P1,P2),
person(P1,_,_,hobbies([H|Tail])),
person(P2,_,_,hobbies([H|Tail])),
member(P1,Tail),
member(P2,Tail).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 18:12:32

为了简单起见,假设谓词person定义如下:

代码语言:javascript
复制
person(ann, hobbies([fishing, pottery, chess])).
person(bob, hobbies([parkour, painting, origami])).
person(coy, hobbies([hunting, fishing, parkour, chess])).

要找到有共同爱好的两个不同的人(P1P2),你必须:

访问第一人称(H1).

  • Access的嗜好列表如果至少有一个兴趣爱好X同时属于列表H1H2.

,则为第二人称X的爱好列表

代码语言:javascript
复制
have_common_hobby(P1, P2) :-
    dif(P1, P2),
    person(P1, hobbies(H1)),
    person(P2, hobbies(H2)),
    once( ( member(X, H1),
            member(X, H2) ) ).

示例:

代码语言:javascript
复制
?- have_common_hobby(A, B).
A = ann,
B = coy ;
A = bob,
B = coy ;
A = coy,
B = ann ;
A = coy,
B = bob ;
false.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70959113

复制
相关文章

相似问题

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