Prolog-如何检查列表是否包含特定项

Prolog-如何检查列表是否包含特定项,prolog,Prolog,1/3,2/3,2/3,2/5,5/5,5/1,,[1/3,2/5,5/5,3/2,4/4,4/4,5/1,5/1,,[1/5,2/5,2/5,2/5,2/5,2/5,5/5,5/5,5/1/5,2/5,2/3,3,3/3,3,3,3/1/1,3,3,3,3,3,3/1,3,3,3,3,3/1,3,3,3,3,3,3,3,3,3/1,1,1,1,1,4,4,4,2,2,2,2,2,4,4,2,2,2,2/1,2,2,2,2,2,2,2,2,2/1,2,2,2,2,2,3,3,2 4/2,5/5]

1/3,2/3,2/3,2/5,5/5,5/1,,[1/3,2/5,5/5,3/2,4/4,4/4,5/1,5/1,,[1/5,2/5,2/5,2/5,2/5,2/5,5/5,5/5,5/1/5,2/5,2/3,3,3/3,3,3,3/1/1,3,3,3,3,3,3/1,3,3,3,3,3/1,3,3,3,3,3,3,3,3,3/1,1,1,1,1,4,4,4,2,2,2,2,2,4,4,2,2,2,2/1,2,2,2,2,2,2,2,2,2/1,2,2,2,2,2,3,3,2 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的列表。我写的函数不能正常工作,你能帮我修复它吗

正如潜伏者所说,使用member,不要忘记基本情况

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

正如潜伏者所说,使用成员,不要忘记基本情况

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

如果要检查列表是否包含成员,请使用
memberchk/2
。因此,如果
I/J
在列表
Item
中,则
memberchk(I/J,Item)
成功。您的
include/3
谓词没有基本大小写,并尝试确保给定列表的每个元素都是
I/J
,因此它将始终失败。如果要检查列表是否包含成员,请使用
memberchk/2
。因此,如果
I/J
在列表
Item
中,则
memberchk(I/J,Item)
成功。您的
include/3
谓词没有基本大小写,并尝试确保给定列表中的每个元素都是
I/J
,因此它将始终失败。