我想编写一个谓词,通过比较列表来查找列表中的特定元素。例如,我可能拥有的数据可能是:
likes(phil, [apple, banana, orange]).
likes(hetti, [apple, cherry, grapes]).
等。
我只是想让某人解释这样的事情是如何运作的,因为我一直试图使用会员或选择;但似乎更难找到相关信息。我可以使用模式匹配吗?
答案 0 :(得分:0)
您似乎想知道phil
和hetti
之间的常见情况。如果是这样,那么这就是代码:
?- bothlike(phil, hetti, Ls), write(Ls), nl.
bothlike(X, Y, Ls) :-
likes(X, Xs),
likes(Y, Ys),
intersection(Xs, Ys, Ls).
likes(phil, [apple, banana, orange]).
likes(hetti, [apple, cherry, grapes]).
intersection([], _, []).
intersection([H1|T1], L2, L3) :-
member(H1, L2),
!,
L3 = [H1|T3],
intersection(T1, L2, T3).
intersection([_|T1], L2, L3) :-
intersection(T1, L2, L3).
它给出了答案[apple]
。