我发现了一个老问题( Prolog Predicate to return true when two people have same hobby ),用于编写一些代码,以便在使用dif的两个人之间找到相同的爱好。我有类似的情况,显示有相同爱好的两个人的名字,但是兴趣爱好元素被定义为一个列表。无论我尝试什么,似乎都不起作用,任何想法都会被感激。
到目前为止,这就是我所拥有的:
one_common_hobby(P1,P2):-
dif(P1,P2),
person(P1,_,_,hobbies([H|Tail])),
person(P2,_,_,hobbies([H|Tail])),
member(P1,Tail),
member(P2,Tail).发布于 2022-02-02 18:12:32
为了简单起见,假设谓词person定义如下:
person(ann, hobbies([fishing, pottery, chess])).
person(bob, hobbies([parkour, painting, origami])).
person(coy, hobbies([hunting, fishing, parkour, chess])).要找到有共同爱好的两个不同的人(P1和P2),你必须:
访问第一人称(H1).
X同时属于列表H1和H2.
,则为第二人称X的爱好列表
have_common_hobby(P1, P2) :-
dif(P1, P2),
person(P1, hobbies(H1)),
person(P2, hobbies(H2)),
once( ( member(X, H1),
member(X, H2) ) ).示例:
?- have_common_hobby(A, B).
A = ann,
B = coy ;
A = bob,
B = coy ;
A = coy,
B = ann ;
A = coy,
B = bob ;
false.https://stackoverflow.com/questions/70959113
复制相似问题