Prolog谓词涉及列表

时间:2016-04-30 21:21:06

标签: prolog

我想编写一个谓词,通过比较列表来查找列表中的特定元素。例如,我可能拥有的数据可能是:

likes(phil, [apple, banana, orange]).
likes(hetti, [apple, cherry, grapes]).

等。

我只是想让某人解释这样的事情是如何运作的,因为我一直试图使用会员或选择;但似乎更难找到相关信息。我可以使用模式匹配吗?

1 个答案:

答案 0 :(得分:0)

您似乎想知道philhetti之间的常见情况。如果是这样,那么这就是代码:

?- 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]