Prolog - 如何检查列表是否包含某个项目

时间:2016-06-11 20:41:50

标签: prolog

假设我有一个列表M = [[1 / 4,2 / 2,3 / 5,4 / 3,5 / 1],[1 / 3,2 / 5,3 / 2,4 / 4 ,5/1],[1 / 5,2 / 3,3 / 1,4 / 4,5 / 2],[1 / 4,2 / 1,3 / 3,4 / 5,5 / 2], [1 / 5,2 / 2,3 / 4,4 / 1,5 / 3],[1 / 1,2 / 4,3 / 2,4 / 5,5 / 3],[1 / 2,2] / 5,3 / 3,4 / 1,1,5 / 4],[1 / 1,2 / 3,3 / 5,4 / 2,5 / 4],[1 / 3,2 / 1,3 / 4 ,4 / 2,5 / 5],[1 / 2,2 / 4,3 / 1,4 / 3,5 / 5]。

我只想返回包含某个项目的列表列表,例如3/5。

我尝试编写一个看起来像这样的函数:

include([X/Y|Rest],I,J):-
    X=:=I,
    Y=:=J,
    include(Rest,I,J).

pick([Item|Rest],I,J,Final):-
    include(Item,I,J),
    pick(Rest,I,J,[Item|R]).

这样我就可以查询pick(M,3,5,F),这样F就包含了3/5的列表。我写的功能不能正常工作,你能帮我解决吗?

1 个答案:

答案 0 :(得分:0)

正如潜伏者所说,使用会员并且不要忘记基本情况。

foo([],_,F).
foo([H|T],Item,[H|F]):-
    member(Item, H),
    foo(T,Item,F).
foo([_|T],Item,F) :-
    foo(T,Item,F).